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
2 changes: 2 additions & 0 deletions AGENT_DIARY.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## Key Historical Decisions

- **F5 relang clean-stack + purge + PR52-resolution (2026-09-29):** индекс был на 20.3% из мусора (3127/15426 чанков, `experiments/**/results|work`) → новый слой `SystemArtifacts.is_experiment_output` + purge 772 файлов/2152 чанков (штатный prune отказал бы: 52.4% файлов > safety-guard 50%), проверка — 0 осталось. Чистый замер B×5: **RU 26/80=32.5% vs EN 30/80=37.5%, CI пересекаются — эффекта языка нет**; 6/16 запросов флипаются all-or-nothing (язык меняет какие, не сколько). Конфликтный PR #52 закрыт как superseded: tier-anchor пропущен (P2 уже закрыт #54 в той же точке), спасены сигмоида/top-N/holdout-калибровка (PR #63); мои FTS-hoist+guard cherry-pick в PR #62. Артефакты: `results/f5relang/`, `scripts/purge_experiment_outputs.py`.

- **stale_after + discriminator for memory notes (2026-09-27):** `src/core/intelligence/staleness.py` + `store.check_staleness()` + CLI. 17/17 tests. stale_after (date) → STALE; discriminator (command, exit≠0) → EXPIRED. Backward compat (no fields → ACTIVE). Implements final promise from hooks thread. Артефакты: `experiments/stale_after/`.

- **redact.py: scrub personal paths (2026-09-27):** `scripts/redact.py` + `tests/test_redact.py` (5/5 pass). Drive paths → `<project>`, username → `<user>`, clean text unchanged. Implements "redact.py at delivery points + planted key test" promise. Артефакты: `scripts/redact.py`, `tests/test_redact.py`.
Expand Down
14 changes: 14 additions & 0 deletions KNOWN_ISSUES.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@

---

## 2026-09-29 — Индекс вычищен от мусора + relang: эффекта языка нет (Fixed/Closed)

- **Purge (Fixed):** 772 файла / 2152 чанка (`experiments/**/results|work`, было 20.3% индекса) удалены one-time скриптом `scripts/purge_experiment_outputs.py` (штатный prune отказал бы: 52.4% файлов > safety-guard 50%). Проверка: 0 осталось. Guard на будущее — PR #62 (`SystemArtifacts.is_experiment_output`).
- **Relang (Closed):** B×5 на чистом стеке — RU 26/80=32.5% vs EN 30/80=37.5%, CI пересекаются → эффекта языка нет. 6/16 запросов флипаются all-or-nothing (язык меняет какие, не сколько). Старый EN-замер на сломанном стеке невалиден. Артефакты: `results/f5relang/`, `f5/RESULTS_RELANG.md`.
- **PR #52 (Closed как superseded):** tier-anchor пропущен (P2 закрыт #54 в той же точке); спасены сигмоида/top-N/holdout-калибровка → PR #63. FTS-hoist+guard → PR #62.
- **Objective (Done 2026-09-29):** перемер на чистом индексе (`results/f5/objective_clean.json`) — A hit@1 4/16, hit@3 5/16, hit@10 6/16 (=), B top-1 4/16. Топ двинут на 1 запрос (шум n=16): purge значимо не повлиял.

## 2026-09-28 — Шкала реранкера + top-N floor (salvage из PR #52, tier-anchor пропущен)

- **Спасено из конфликтного PR #52:** `_sigmoid`-нормализация логитов llama.cpp → [0,1] (без неё MIN_RERANK_SCORE=0.3 отсекал 70–97% выдачи), top-N recall floor `reranker_topn_keep` (default 0 = выключено), holdout-калибровка порога с запретом eval-источников кодом. Guard: 4 sigmoid-теста + 13 тестов top-N/калибровки.
Expand Down Expand Up @@ -43,6 +50,13 @@

**24 entries** — compressed per §4.8 R3 (conclusion-first; dedup 2026-09-08, 2026-09-21). Closed entries moved to docs/archive/KNOWN_ISSUES_2026_09.md on 2026-09-27 (R1 size guard; second batch on merge experiment/4a-unit-of-return).

## 2026-09-28 — Холодный FTS-билд превышал 2s-бюджет и молча выпадал (Fixed) + _get_ext_dir указывал в src/ (Fixed)

- **FTS (c, flaky A/B):** замер — холодный `to_pandas`-билд всего индекса = **2.47s > 2.0s** `wait_for` в `engine.py:671`. Первый поиск в свежем процессе молча терял FTS-тир → пилот 18/20 vs 8/20 на тех же запросах. **Fix:** build вынесен из-под таймаута (идемпотентен, double-checked lock), 2s остались только на сам поиск (~0.05s). Guard `test_fts5_timeout_does_not_break_search` зелёный.
- **llama-пути (b):** `llama_install.py:_get_ext_dir` брал 3 `parent` от `__file__` вместо 4 → указывал в `src/`, ветка «режим разработки» была мёртвой, модели резолвились в пустой `%LOCALAPPDATA%/mscodebase/models`. На вопрос «падает или не успевает»: после простоя restart **пытается** (`idle-unload recovery`), но падал по отсутствию файлов, не по таймингу. **Fix:** off-by-one исправлен + `multilingual-e5-small-Q8_0.gguf` (132MB) докопирован из расширения в `models/` (git-ignored). Live-check `smoke_e2e.py`: **SMOKE E2E PASSED** (embed dim=384, rerank top=1, поиск по индексу).
- **Побочно (Verified, не чинено — решение владельца):** холодный топ захламлён артефактами (`judged_raw*.json`, `work/ctx_*.txt` в выдаче) — живое подтверждение индексного мусора (P2-смежное). Чистка индекса сменит ретрив-базисы.
- **Статус:** ✅ Fixed (пути + FTS-холод).

## 2026-09-27 — Import-time os.environ mutation in scripts breaks xdist workers (Fixed)

- **Симптом:** 6 plugin-тестов (`test_plugins_subprocess/registry`) падали под `-n auto` с `ModuleNotFoundError: No module named 'src'` в runner-subprocess, серийно (`-n0`) — зелёные.
Expand Down
9 changes: 9 additions & 0 deletions experiments/4A_unit_of_return/f5/RESULTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,15 @@
G6 `OVERLAP: PASS`; автор — context-clean субагент). **Harness:** `scripts/f5_retrieve_arms.py`.
**Сырьё:** `f5/results_fresh.json`.

## Перемер на чистом индексе (2026-09-29, `results/f5/objective_clean.json`)

После purge 772 мусорных файлов (20.3% чанков): **A hit@1 4/16 (0.25) · hit@3 5/16 (0.3125) ·
hit@10 6/16 (0.375) · B top-1 4/16 (0.25)**. Против базы 26.09 (5/16 · 6/16 · 6/16 · 5/16):
hit@10 идентичен (те же 6 gold достижимы), топ-позиции −1 запрос (в пределах шума n=16).
**Вердикт: purge топ не двинул значимо** — мусор душил лексику, но top-1 устоял.
B-контексты стали короче (avg 8184 vs 19747 chars — другие top-1 доки).
Старая база ниже сохранена как протухшая, цитировать только новую.

## Referent (каждое число)

| Поле | Значение |
Expand Down
38 changes: 38 additions & 0 deletions experiments/4A_unit_of_return/f5/RESULTS_RELANG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# F5 relang — RU vs EN на чистом стеке (2026-09-29)

**Вопрос:** влияет ли язык промпта на точность (B-плечо, whole-doc)?
**Дизайн:** 16 EN-переводов frozen-вопросов (`results/f5relang/queries_en.jsonl`, reference не тронуты),
B × 5 trials × 2 языка = 160+160 вызовов, один чистый индекс (после purge 772 мусорных файлов),
один стек, один день. Флаг харнесса `--queries-file` (варианты вне `frozen/`).

## Результат

| язык | correct | rate | Wilson95 |
|---|---|---|---|
| RU | 26/80 | 0.325 | 0.232–0.434 |
| EN | 30/80 | 0.375 | 0.277–0.485 |

**Вердикт: эффекта языка нет** (CI пересекаются почти полностью).
Старый EN-замер 38.75% на сломанном стеке (BM25-only, мёртвый эмбеддер) — невалиден, не цитировать.

## Нюанс (ключевая находка)

6/16 запросов флипаются между языками all-or-nothing
(F5S-02: RU 5/5 vs EN 0/5; F5S-03/04/08 наоборот; F5S-13/15 частично).
Язык меняет *какие* запросы проходят (ретрив на другом языке достаёт другие доки),
а не *сколько*. Бимодальность подтверждает тезис Reader Capacity: ретрив решает,
читатель подчиняется.

## Побочно

- RU на чистом индексе (32.5%) ≈ RU на мусорном (34.4%, trials=10): B-плечо к мусору
почти иммунно. Выигрыш от purge ждём в objective hit@k — **objective-база протухла,
нужен перемер `f5_retrieve_arms`**.
- Сырьё: `results/f5relang/{ru,en}/judged_raw.json`, `aggregate.json`.

## Оговорки

- Run-to-run дисперсия жива (пилот 18/20 vs 8/20 на тех же запросах ранее) —
точечные сравнения ±1 запрос не интерпретировать, только агрегаты с CI.
- Замеры по новым правилам: свежий процесс, warm-up, void-флаг (`reranker_ms=0` →
замер недействителен), один event loop на серию.
Loading
Loading