From 167172adb93c391a228181ff144d38b6fb6c39d7 Mon Sep 17 00:00:00 2001 From: MSCodeBase Agent Date: Sat, 26 Sep 2026 13:27:56 +0300 Subject: [PATCH 1/2] chore(privacy): remove personal absolute paths from docs and plugin Replace machine-specific absolute paths (owner username, drive-rooted project dir) with env placeholders and relative forms across human-facing docs (README/AGENTS/ledgers/docs en-ru-zh) and the opencode gate plugin. Untrack .local/ machine scripts. Add tests/test_no_personal_paths.py (scans tracked docs+plugin only). Git history is intentionally not rewritten. --- .gitignore | 3 +- .opencode/plugin/mscodebase_gate.ts | 10 ++- AGENTS.md | 18 ++--- AGENT_DIARY.md | 6 +- AI_INSTALLATION_PROMPT.md | 10 +-- EXPERIMENTS_LOG.md | 8 +- KNOWN_ISSUES.md | 2 +- README.md | 2 +- WISDOM.md | 2 +- docs/BENCHMARK_RESULTS.md | 6 +- docs/en/INSTALL.md | 2 +- docs/en/ZED_WINDOWS_QUIRKS.md | 6 +- docs/en/investigations/LSP_WONTFIX.md | 6 +- docs/en/investigations/ONNX_SESSION_REPORT.md | 4 +- .../2026-07-11-telemetry-and-metrics.md | 6 +- .../2026-07-11-threads-db-research.md | 2 +- docs/research/UNIVERSAL_ENGINE_PLAN.md | 2 +- docs/ru/INSTALL.md | 2 +- docs/ru/README.md | 2 +- docs/ru/UNIVERSAL_ENGINE_PLAN.md | 2 +- docs/ru/ZED_WINDOWS_QUIRKS.md | 6 +- docs/ru/investigations/LSP_WONTFIX.md | 6 +- docs/zh/INSTALL.md | 2 +- docs/zh/README.md | 2 +- docs/zh/ZED_WINDOWS_QUIRKS.md | 6 +- docs/zh/investigations/LSP_WONTFIX.md | 6 +- tests/test_no_personal_paths.py | 76 +++++++++++++++++++ uninstall.bat | 2 +- 28 files changed, 143 insertions(+), 64 deletions(-) create mode 100644 tests/test_no_personal_paths.py diff --git a/.gitignore b/.gitignore index 4afbfa48..490f4d63 100644 --- a/.gitignore +++ b/.gitignore @@ -187,7 +187,8 @@ experiments/bootstrap/__pycache__/ # Bootstrap Step 3: дефолтный trace_result.json в cwd (bootstrap_trace_plugin.py) bootstrap_trace_*.json docs/generated/MODULE_INDEX.md -.local/state/gh/device-id +# Local machine scripts (personal absolute paths) — never publish +.local/ # Agent temp scripts scripts/_diag_*.py diff --git a/.opencode/plugin/mscodebase_gate.ts b/.opencode/plugin/mscodebase_gate.ts index d8df46f0..38517cc1 100644 --- a/.opencode/plugin/mscodebase_gate.ts +++ b/.opencode/plugin/mscodebase_gate.ts @@ -18,10 +18,11 @@ import type { Plugin } from "@opencode-ai/plugin" import { appendFileSync, mkdirSync } from "node:fs" import { execFile } from "node:child_process" -import { dirname } from "node:path" +import { dirname, join } from "node:path" +import { tmpdir } from "node:os" -const PY = process.env.MSCODEBASE_PY ?? "D:/Project/MSCodeBase/venv/Scripts/python.exe" -const LOG = process.env.MSCODEBASE_GATE_LOG ?? "C:/Users/misha/AppData/Local/Temp/opencode/mscodebase_gate.log" +// Project-local venv by default; MSCODEBASE_PY overrides. No machine-specific path. +const LOG = process.env.MSCODEBASE_GATE_LOG ?? join(tmpdir(), "opencode", "mscodebase_gate.log") const STALE_MODE = process.env.MSCODEBASE_STALE_GATE ?? "block" const ISO_MODE = process.env.MSCODEBASE_ISOLATION_GATE ?? "advisory" @@ -38,10 +39,11 @@ function log(rec: Record) { } function cli(directory: string, tool: string, argsJson: string): Promise { + const py = process.env.MSCODEBASE_PY ?? join(directory, "venv", "Scripts", "python.exe") return new Promise((resolve) => { try { execFile( - PY, + py, ["-m", "src.cli", tool, argsJson], { cwd: directory, timeout: 90000, windowsHide: true, maxBuffer: 4 * 1024 * 1024 }, (_err, stdout) => resolve(stdout ?? ""), diff --git a/AGENTS.md b/AGENTS.md index f72d40c6..0ee3968f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -149,7 +149,7 @@ read_live_file(file_path="src\\core\\indexer.py") ← только нужны ### Архитектура -- **Source code:** `D:\Project\MSCodeBase` — здесь ты редактируешь код. +- **Source code:** `` — здесь ты редактируешь код. - **Extension dir:** `%LOCALAPPDATA%\Zed\extensions\mscodebase-intelligence` — откуда MCP реально запускается. - **Venv:** `{EXT}\venv\Scripts\python.exe` — Python со всеми пакетами. - **llama binary:** `{EXT}\llama_msvc\` (CPU) или `{EXT}\llama_vulkan\` (GPU). @@ -161,7 +161,7 @@ read_live_file(file_path="src\\core\\indexer.py") ← только нужны Когда пользователь просит что-то изменить и проверить: ``` -ШАГ 1 — Правим код в исходниках (D:\Project\MSCodeBase\src\) +ШАГ 1 — Правим код в исходниках (\src\) ШАГ 2 — Синхронизируем в расширение + убиваем процессы ШАГ 3 — Запускаем install.py для обновления ШАГ 4 — Запускаем MCP вручную из расширения @@ -173,7 +173,7 @@ read_live_file(file_path="src\\core\\indexer.py") ← только нужны ### Детальный протокол **Шаг 1 — Правка кода:** -- Редактируешь файлы в `D:\Project\MSCodeBase\src\`. +- Редактируешь файлы в `\src\`. - После `edit_file` / `write_file` → `notify_change()`. - Для переименования файлов используй `apply_file_move(old, new)` вместо `notify_change` — мета-патчинг (50ms, 0MB RAM) вместо полной переиндексации (5s, 700MB RAM). @@ -186,13 +186,13 @@ sleep 2 # Скопировать изменённые файлы в расширение # (если install.py запускать не надо, а надо быстро обновить один файл) -cp /d/Project/MSCodeBase/src/providers/reranker/llama_runner.py \ - "/c/Users/misha/AppData/Local/Zed/extensions/mscodebase-intelligence/src/providers/reranker/llama_runner.py" +cp /path/to/repo/src/providers/reranker/llama_runner.py \ + "/path/to/LocalAppData/Zed/extensions/mscodebase-intelligence/src/providers/reranker/llama_runner.py" ``` **Шаг 3 — install.py (если нужно обновить бинарники/модули):** ```bash -cd /d/Project/MSCodeBase && python install.py +cd /path/to/repo && python install.py ``` Учти: install.py интерактивный (спрашивает Y/n). Если нужно авто-подтверждение: ```bash @@ -201,7 +201,7 @@ printf 's\nn\n' | python install.py # s=skip pip, n=skip ONNX models **Шаг 4 — Запуск MCP для теста:** ```bash -cd "/c/Users/misha/AppData/Local/Zed/extensions/mscodebase-intelligence" && \ +cd "/path/to/LocalAppData/Zed/extensions/mscodebase-intelligence" && \ nohup venv/Scripts/python.exe -m src.main > /tmp/mcp_test.log 2>&1 & sleep 8 # ждём пока стартанёт embedder + reranker ``` @@ -462,9 +462,9 @@ For file renames, use `apply_file_move(old, new)` instead of `notify_change` — 12. Root чистый? (нет новых одноразовых скриптов/логов в корне — §0.6) 13. **Синхронизация лаборатории с портфолио (обязательна после ЛЮБОЙ эксперимент-серии или изменения вывода):** - - Файлы: `D:\Project\MSPortfolio\src\data\lab\experiments.json` (+ `experiments.ru.json`) — эксперименты и отрицательные результаты; при необходимости `diary.json`/`known-issues.json` (и RU-зеркала). Портфолио — публичное зеркало этой лаборатории, рассинхрон = публичный неточный claim (прецеденты: KI-103 present-trap, exp-18/19 «graph не помогает» vs E5). + - Файлы: `\src\data\lab\experiments.json` (+ `experiments.ru.json`) — эксперименты и отрицательные результаты; при необходимости `diary.json`/`known-issues.json` (и RU-зеркала). Портфолио — публичное зеркало этой лаборатории, рассинхрон = публичный неточный claim (прецеденты: KI-103 present-trap, exp-18/19 «graph не помогает» vs E5). - Новый эксперимент → запись с полями: id (`exp-N`), date, title, hypothesis, command, result, verdict, finding, chart (если есть числа), conclusion, links. Сырые числа из `EXPERIMENTS_LOG.md`, не по памяти. - Опровергнут прежний вывод → НЕ молча менять старую запись, а добавить в неё `CORRECTED (…): <что опровергнуто и чем>` (формат как в exp-19/E5), сохраняя историю. - RU-файл обновляется В ТОМ ЖЕ коммите, что и EN (конгруэнтность по id/verdict/temperature — guard-тест в `tests/lab.test.ts`). - - Проверка перед коммитом портфолио: `cd D:\Project\MSPortfolio && pnpm test tests/lab.test.ts tests/evidence-eval.test.ts` — ловит рассинхрон EN/RU и коллизии с парафраз-сетами (новые слова в корпусе могут случайно поддержать парафразу — тогда переформулировать, не трогать тест). + - Проверка перед коммитом портфолио: `cd && pnpm test tests/lab.test.ts tests/evidence-eval.test.ts` — ловит рассинхрон EN/RU и коллизии с парафраз-сетами (новые слова в корпусе могут случайно поддержать парафразу — тогда переформулировать, не трогать тест). - Не выполнено → статус `⚠️ портфолио не синхронизировано` в `[🏁 ИТОГ]`, даже если тесты проекта зелёные. diff --git a/AGENT_DIARY.md b/AGENT_DIARY.md index 42eab5fe..d5c6b2c8 100644 --- a/AGENT_DIARY.md +++ b/AGENT_DIARY.md @@ -10,7 +10,7 @@ - **E10: сдержанность доставки (anti-numbing) (2026-09-22):** `src/core/restraint.py` — сигнатура findings (kind+symbol+file) + cooldown 600s с backoff ×2^strikes; состояние — один JSON на проект. Opt-in `graph_query isolation` + `kwargs={"restraint":true}`; блокирующие гейты НЕ заходят (жёсткий стоп ≠ нытьё). unit 4/4 (итого 22/22 с gate/redact); CLI E2E: call1 `deliver ✓`, call2 `deliver ✗` (cooldown 597s). Гоча: доп. аргументы CLI — через `kwargs`. Детали — EXPERIMENTS_LOG Exp 22. - **E11: замороженный список vs новый arrival index Тома (2026-09-22):** каталог `tjonesit/crystals` @3e30ed2 (`catalogue/README.md`, arrival index 25 фраз→записи). Слепой маппер, 5 прогонов / 3 модели: **#16 («агент не пользуется тулами») → A в 5/5**, включая оба ВАЛИДНЫХ (longcat-2.0, qwen3.7-plus; контроли 6/6). deepseek ×3 невалидны — NC3 (#11 Safari/CSS) притянулся к E generated-document (UI/spacing), та же болезнь, что в E7. Вывод: arrival layer чинит #16 (было NONE 10/10); воспроизводимость всё ещё в читателе. ⚠ Новый риск: фраза-ловушка на соседнем домене (UI→CSS) = кандидат в дырку. Детали — EXPERIMENTS_LOG Exp 23. - **Clean-state 44d451f6 (2026-09-22):** локальный clone закоммиченного состояния → `verify_clean_state.sh --no-clone`: **1800 passed / 0 failed / 13 skipped / 98 deselected** (822s), lock-drift negative-control PASSED, guard inventory ALL PROVEN (3), revision gate VALID. Новый core (quiet_break_gate/redact/restraint) прошёл clean-state. Не запушено (push — только по явному слову). -- **CI ubuntu-red: TESTS-signal fixture была Windows-only (2026-09-23):** `tests/test_graph_stage_e4.py` хардкодил `file_path="D:/Project/..."`; на POSIX `Path("D:/...").is_absolute()`=False → `get_tests_for_symbol` нормализовал в `/D:/...` → узел не найден → 0 тестов (падали 2 теста только на ubuntu; Windows-джоба зелёная). Fix: фикстура строит абсолютные пути из `tmp_path.as_posix()`. Guard: тест платформо-независим (класс P-ловушки «Windows-only тест без skipif», WISDOM 2026-08-08). +- **CI ubuntu-red: TESTS-signal fixture была Windows-only (2026-09-23):** `tests/test_graph_stage_e4.py` хардкодил `file_path="/..."`; на POSIX `Path("D:/...").is_absolute()`=False → `get_tests_for_symbol` нормализовал в `/D:/...` → узел не найден → 0 тестов (падали 2 теста только на ubuntu; Windows-джоба зелёная). Fix: фикстура строит абсолютные пути из `tmp_path.as_posix()`. Guard: тест платформо-независим (класс P-ловушки «Windows-only тест без skipif», WISDOM 2026-08-08). - **CI green (2026-09-23):** фикс 808864c5 → повторный CI **success** (ubuntu 13m21s + windows 17m20s + clean-state 13m15s + transport/manifest/docker). PR #40 (draft, mergeable). Единственный красный — GitHub Advanced Security (Copilot Autofind): `CAPIError: 400 The requested model is not supported` = инфра-сбой GitHub, не наш код (и на main так же). - **Hook в репозиторий (2026-09-23):** `.opencode/plugin/mscodebase_gate.ts` — на `git commit`: `stale_detector` **BLOCK** (объективный дрейф версий; сейчас 0) + `graph_query isolation` **ADVISORY** (soft: у графа есть FP). Advisory = before-stash/after-deliver по callID (урок E8). Env-переключатели: `MSCODEBASE_PY`, `MSCODEBASE_STALE_GATE`, `MSCODEBASE_ISOLATION_GATE`, `MSCODEBASE_GATE_LOG`. CLI проверен из корня репо venv-python. Активируется после reload Zed. Глобально (все проекты) — только по явному разрешению (файл вне рабочей папки, §3 HALT). - **opencode-плагин: `$` не в контексте (2026-09-23, P-ловушка):** `.opencode/plugin/mscodebase_gate.ts` загрузился (лог `init`), но на хуке `TypeError: $ is not a function` — в opencode **1.18.23** контекст фабрики не даёт рабочий `$` (доки описывают v2, где `$: BunShell` есть). Фикс: вызывать python через `node:child_process.execFile` (аргументы массивом — без shell-квотирования), не через `$`. Guard: не полагаться на `$` в локальных плагинах этой версии. @@ -394,7 +394,7 @@ **Status:** ✅ Fix (замеры, кода не менялось). **Root Cause (KNOW ISSUES «Lazy-only верификация»):** вопрос, успевает ли VOR проверить ACTIVE-узлы в рамках budget_ms=50 (read-path) / 250 (background idle), и детектит ли он внешнее git-pull изменение без notify_change (H3). -**Команда:** `venv/Scripts/python.exe %TEMP%/opencode/exp1_vor_catchup.py` и `exp3b_head_polling.py` (scratch, изолированные temp-репо/project dirs, бэкапы restore в finally). Венв: `C:\Users\misha\AppData\Local\Zed\extensions\mscodebase-intelligence\venv`. +**Команда:** `venv/Scripts/python.exe %TEMP%/opencode/exp1_vor_catchup.py` и `exp3b_head_polling.py` (scratch, изолированные temp-репо/project dirs, бэкапы restore в finally). Венв: `%LOCALAPPDATA%\Zed\extensions\mscodebase-intelligence\venv`. **Сырые результаты (Exp 1, synthetic stale nodes, budgets 50/250ms):** ``` @@ -530,7 +530,7 @@ VERDICT H3: CONFIRMED ## [2026-09-17] Bootstrap Pipeline: внешняя валидация на чужих Python-проектах (anti-sleeveness) **Status:** Implemented (параметризация dynamic_trace_plugin.py) + валидация на внешних репо -**Контекст:** ревизия всех 18 репо в D:\Project (субагент): кандидаты «чистого» кода — gemma_agent (1102 py, 464 test_*.py, git), 456789/ARCLUX (TS), bench_projects (black/httpbin/headroom). Цель — не быть слепым: детектор и TESTS-рёбра проверялись только на собственном репо. +**Контекст:** ревизия всех 18 репо в (субагент): кандидаты «чистого» кода — gemma_agent (1102 py, 464 test_*.py, git), 456789/ARCLUX (TS), bench_projects (black/httpbin/headroom). Цель — не быть слепым: детектор и TESTS-рёбра проверялись только на собственном репо. **Find Units:** bootstrap_entities.detect_entities на чужих: black(src)=16 dataclass/2 NT/73 classes, gemma_agent/core=65 dc/228 classes, gemma_agent/modules=1 dc, httpbin=0 (старый код без dataclass). Обнаружена слепота: детектор жёстко завязан на src/ (gemma_agent использует core/, libraries/, modules/ → нужен явный src_dir). **Fix:** dynamic_trace_plugin.py параметризован: TRACE_SRC_ROOT/TRACE_OUT (env, дефолт=свой repo). Иначе чужой проект нельзя трассировать. **Трассировка чужих:** black → НЕ работает: скомпилированный .pyd wheel, settrace не видит нативные кадры (0% всех тестов). gemma_agent (2882 теста) → 2737/2882 (95.0%) тестов имеют ≥1 src-функцию, 3827 уникальных src-функций, ~11.6 функций/тест — подтверждает обобщаемость A2 TESTS-рёбер на чужих проектах. diff --git a/AI_INSTALLATION_PROMPT.md b/AI_INSTALLATION_PROMPT.md index 016ac1c6..7e30edce 100644 --- a/AI_INSTALLATION_PROMPT.md +++ b/AI_INSTALLATION_PROMPT.md @@ -45,7 +45,7 @@ ### ВАЖНО: архитектура проекта -- **Source code:** `D:\Project\MSCodeBase` — здесь ты редактируешь код +- **Source code:** `` — здесь ты редактируешь код - **Extension dir:** `%LOCALAPPDATA%\Zed\extensions\mscodebase-intelligence` — откуда MCP реально запускается - **Venv:** `{EXT}\venv\Scripts\python.exe` - **llama binary:** `{EXT}\llama_msvc\` (CPU) или `{EXT}\llama_vulkan\` (GPU) @@ -78,7 +78,7 @@ taskkill //F //FI "WINDOWTITLE eq mscodebase*" //IM python.exe 2>&1 #### Шаг 3. Запустить install.py ```bash -cd /d/Project/MSCodeBase +cd /path/to/repo printf 's\nn\n' | python install.py ``` @@ -91,7 +91,7 @@ install.py сделает всё сам: #### Шаг 4. ПРОВЕРКА — запустить MCP напрямую из расширения ```bash -cd "/c/Users/misha/AppData/Local/Zed/extensions/mscodebase-intelligence" +cd "/path/to/LocalAppData/Zed/extensions/mscodebase-intelligence" nohup venv/Scripts/python.exe -m src.main > /tmp/mcp_test.log 2>&1 & sleep 10 ``` @@ -171,7 +171,7 @@ install.py делает ВСЮ тяжёлую работу. Этот промп | Что делает install.py | Детали | |---|---| -| **Копирование исходников** | 39+ файлов из `D:\Project\MSCodeBase\src\` в расширение | +| **Копирование исходников** | 39+ файлов из `\src\` в расширение | | **Venv + пакеты** | 33 Python пакета (httpx, lancedb, pyarrow и т.д.) | | **llama.cpp бинарник** | `b9940` — MSVC (CPU) + Clang (Vulkan GPU) | | **CRT патч для Insider** | Авто-патч PE импортов `api-ms-win-crt-*` → `ucrtbase.dll` | @@ -213,7 +213,7 @@ install.py делает ВСЮ тяжёлую работу. Этот промп Когда нужно изменить код и проверить: ``` -ШАГ 1 — Правим код в исходниках (D:\Project\MSCodeBase\src\) +ШАГ 1 — Правим код в исходниках (\src\) ШАГ 2 — Убиваем старые процессы ШАГ 3 — install.py (синхронизация в расширение) ШАГ 4 — Запуск MCP напрямую из расширения diff --git a/EXPERIMENTS_LOG.md b/EXPERIMENTS_LOG.md index 5f9ed324..5e69df04 100644 --- a/EXPERIMENTS_LOG.md +++ b/EXPERIMENTS_LOG.md @@ -889,7 +889,7 @@ lancedb version: 0.34.0 **Ожидание:** исправление PROJECT_ROOT (parent×3 → parents[3]) в onnx_client/onnx_server вернёт ONNX-режим: сервер найдёт скрипт и модель, /embed вернёт 384-dim. **Команда:** ``` -cd && PYTHONPATH= venv/Scripts/python.exe D:/Project/MSCodeBase/.local/onnx_client_check.py +cd && PYTHONPATH= venv/Scripts/python.exe /.local/onnx_client_check.py curl -X POST http://127.0.0.1:9876/embed -d '{"text":"тест"}' ``` **Сырой результат:** @@ -1067,7 +1067,7 @@ graph: 7247 nodes, 21404 edges latency_ms: [0.3, 0.14, 0.12, 0.11, 0.09, 0.09, 0.09] median_ms: 0.11 ``` **Вердикт:** подтверждена — 0.11ms медиана (гипотеза <50ms выполнена ×450). Реальный путь найден, структура корректна (source→CALLS→target). -**Урок:** `shortest_path` траverses ТОЛЬКО outgoing-рёбра (`graph.py:974` `WHERE source_id = ?`) — классы/методы без исходящих рёбер недостижимы. MCP-обёртке `action="path"` нужен опциональный `direction="both"` (BFS уже параметризуем). Также: qname-формат `D:.D:/Project/...` — клиенту нужен подсказчик имён (как `find_nodes(name_pattern=...)`). +**Урок:** `shortest_path` траverses ТОЛЬКО outgoing-рёбра (`graph.py:974` `WHERE source_id = ?`) — классы/методы без исходящих рёбер недостижимы. MCP-обёртке `action="path"` нужен опциональный `direction="both"` (BFS уже параметризуем). Также: qname-формат `D:./...` — клиенту нужен подсказчик имён (как `find_nodes(name_pattern=...)`). --- @@ -2030,13 +2030,13 @@ Red Team: 5/5 атак с защитой (dirty-cache-persistence, stale-verifie **Контекст:** закрыть doc 10-continuous-verification (H1 idle + H2 HEAD-инвалидация на main; остался H3 TTL для INCONCLUSIVE/непроверенных узлов, которые «висят вечно»: 42-70 ACTIVE без verified_at). Гипотеза выбора N: «сколько дней без подтверждения = не подтверждён» — мерить распределение verified_at live-памяти, а не угадывать. -**Дизайн:** измерение live `project_memory.json` (C:\Users\misha\AppData\Local\mscodebase\projects\bfe9644b\intelligence\project_memory.json) через scratch-скрипт (vor_ttl_audit.py, удалён); затем реализация: `last_checked` для всех проверенных (INCONCLUSIVE включительно, rate-limit записи `VOR_LAST_CHECKED_INTERVAL_SEC=6h` — H1 idle не переписывает файл каждый тик) + `stale_ttl_nodes` в stats (не проверен в проходе и след старше `VOR_TTL_DAYS`), label `verification="stale_ttl"`. +**Дизайн:** измерение live `project_memory.json` (%LOCALAPPDATA%\mscodebase\projects\bfe9644b\intelligence\project_memory.json) через scratch-скрипт (vor_ttl_audit.py, удалён); затем реализация: `last_checked` для всех проверенных (INCONCLUSIVE включительно, rate-limit записи `VOR_LAST_CHECKED_INTERVAL_SEC=6h` — H1 idle не переписывает файл каждый тик) + `stale_ttl_nodes` в stats (не проверен в проходе и след старше `VOR_TTL_DAYS`), label `verification="stale_ttl"`. **Команда:** `venv/Scripts/python.exe /vor_ttl_audit.py`; `python -m pytest tests/test_verify_on_read_ttl.py -v`; полный `python -m pytest tests/ -q`. **Сырой результат:** ``` -audit 2026-09-11 (bfe9644b project_memory.json, symlink D:\Project\MSCodeBase): +audit 2026-09-11 (bfe9644b project_memory.json, symlink ): ACTIVE: 70 total, 70 без verified_at REFUTED: 28 total, 27 без verified_at, старейший age_days=28 SUPERSEDED: 4 total, 3 без verified_at, старейший age_days=7 diff --git a/KNOWN_ISSUES.md b/KNOWN_ISSUES.md index bce03fa5..863f5b93 100644 --- a/KNOWN_ISSUES.md +++ b/KNOWN_ISSUES.md @@ -265,7 +265,7 @@ - Live-╨┐╤А╨╛╨│╨╛╨╜ ╨╜╨░ ╤А╨╡╨░╨╗╤М╨╜╨╛╨╝ ╤А╨╡╨┐╨╛: **49 dataclass** (46 ╨╕╨╖ ╨│╤А╨░╤Д╨░ + 3 ╨╜╨░╤И╨╕╤Е bootstrap-╨║╨╗╨░╤Б╤Б╨╛╨▓: EntityShape/EntitiesBootstrapStats/TestsBootstrapStats тАФ ╨╡╤Й╤С ╨╜╨╡ ╨┐╨╡╤А╨╡╨╕╨╜╨┤╨╡╨║╤Б╨╕╤А╨╛╨▓╨░╨╜╤Л), **0 NamedTuple** (╨▓ ╤А╨╡╨┐╨╛ ╨╛╤В╤Б╤Г╤В╤Б╤В╨▓╤Г╤О╤В), **open_table 12 call-╤Б╨░╨╣╤В╨╛╨▓** тАФ ╨╜╨╡ ╨╕╨╜╤В╨╡╤А╨┐╤А╨╡╤В╨╕╤А╤Г╤О╤В╤Б╤П ╨║╨░╨║ ╤Б╤Г╤Й╨╜╨╛╤Б╤В╨╕. ╨Я╨╛╤В╨╡╤А╤М ╨┐╤А╨╛╤В╨╕╨▓ ╨╢╨╕╨▓╨╛╨│╨╛ ╨│╤А╨░╤Д╨░ 0 (46 ╨┐╨╛╨╗╨╜╨╛╤Б╤В╤М╤О ╨┐╨╛╨║╤А╤Л╤В╤Л ╨┤╨╡╤В╨╡╨║╤В╨╛╤А╨╛╨╝). pydantic/TypedDict/╨░╨╗╨╕╨░╤Б╤Л ╨╕╨╝╨┐╨╛╤А╤В╨╛╨▓ (`NamedTuple as NT`) тАФ ╨▓╨╜╨╡ ╤Б╨║╨╛╤Г╨┐╨░ (╨┤╨╛╨║╤Г╨╝╨╡╨╜╤В╨╕╤А╨╛╨▓╨░╨╜╨╛ ╨▓ docstring). - ╨а╨╛╨╗╤М (╨┐╨╛ Exp 9): ╤Б╤В╨░╤В╨╕╨║╨░ тАФ ╨╜╨╡ ╨╖╨░╨╝╨╡╨╜╨░ ╨┤╨╕╨╜╨░╨╝╨╕╨║╨╕; ╨┤╨╡╤В╨╡╨║╤В╨╛╤А = fallback ╨┤╨╗╤П ╨┤╨╕╨╜╨░╨╝╨╕╤З╨╡╤Б╨║╨╕-╨┐╤Г╤Б╤В╤Л╤Е ╤В╨╡╤Б╤В╨╛╨▓ + pre-filter ╤А╨░╨╜╨╢╨╕╤А╨╛╨▓╨░╨╜╨╕╤П (╨▓╤Е╨╛╨┤ ╨┤╨╗╤П `mscodebase bootstrap`, ╨и╨░╨│ 3). - **╨Т╨╜╨╡╤И╨╜╤П╤П ╨▓╨░╨╗╨╕╨┤╨░╤Ж╨╕╤П ╨╜╨░ ╤З╤Г╨╢╨╕╤Е Python-╨┐╤А╨╛╨╡╨║╤В╨░╤Е (2026-09-17, anti-sleeveness):** - - ╨а╨╡╨▓╨╕╨╖╨╕╤П ╨▓╤Б╨╡╤Е 18 ╤А╨╡╨┐╨╛ `D:\Project\` (╤Б╤Г╨▒╨░╨│╨╡╨╜╤В): ╨╗╤Г╤З╤И╨╕╨╡ ┬л╤З╨╕╤Б╤В╤Л╨╡┬╗ ╨║╨░╨╜╨┤╨╕╨┤╨░╤В╤Л тАФ `gemma_agent` (1102 py / 464 test_*.py / git), `456789/ARCLUX` (TS), `bench_projects` (black/httpbin/headroom). ╨Ф╨╛ ╤Н╤В╨╛╨│╨╛ ╨┤╨╡╤В╨╡╨║╤В╨╛╤А ╨╕ TESTS-╤А╤С╨▒╤А╨░ ╨┐╤А╨╛╨▓╨╡╤А╤П╨╗╨╕╤Б╤М ╤В╨╛╨╗╤М╨║╨╛ ╨╜╨░ ╤Б╨╛╨▒╤Б╤В╨▓╨╡╨╜╨╜╨╛╨╝ ╤А╨╡╨┐╨╛. + - ╨а╨╡╨▓╨╕╨╖╨╕╤П ╨▓╤Б╨╡╤Е 18 ╤А╨╡╨┐╨╛ `\` (╤Б╤Г╨▒╨░╨│╨╡╨╜╤В): ╨╗╤Г╤З╤И╨╕╨╡ ┬л╤З╨╕╤Б╤В╤Л╨╡┬╗ ╨║╨░╨╜╨┤╨╕╨┤╨░╤В╤Л тАФ `gemma_agent` (1102 py / 464 test_*.py / git), `456789/ARCLUX` (TS), `bench_projects` (black/httpbin/headroom). ╨Ф╨╛ ╤Н╤В╨╛╨│╨╛ ╨┤╨╡╤В╨╡╨║╤В╨╛╤А ╨╕ TESTS-╤А╤С╨▒╤А╨░ ╨┐╤А╨╛╨▓╨╡╤А╤П╨╗╨╕╤Б╤М ╤В╨╛╨╗╤М╨║╨╛ ╨╜╨░ ╤Б╨╛╨▒╤Б╤В╨▓╨╡╨╜╨╜╨╛╨╝ ╤А╨╡╨┐╨╛. - `bootstrap_entities.detect_entities` ╨╛╨▒╨╛╨▒╤Й╨░╨╡╤В╤Б╤П: **black(src)=16 dataclass / 2 NT / 73 classes**, **gemma_agent/core=65 dc / 228 classes**, gemma_agent/modules=1 dc, httpbin=0 (╤Б╤В╨░╤А╤Л╨╣ ╨║╨╛╨┤ ╨▒╨╡╨╖ dataclass). ╨Э╨░╨╣╨┤╨╡╨╜╨░ ╤Б╨╗╨╡╨┐╨╛╤В╨░: ╨┤╨╡╤В╨╡╨║╤В╨╛╤А ╨╢╤С╤Б╤В╨║╨╛ ╨╖╨░╨▓╤П╨╖╨░╨╜ ╨╜╨░ ╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│ `src/` тАФ gemma_agent ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В `core/`/`libraries/`/`modules/`, ╨╜╤Г╨╢╨╡╨╜ ╤П╨▓╨╜╤Л╨╣ `src_dir` (╨┐╨░╤А╨░╨╝╨╡╤В╤А ╤Г╨╢╨╡ ╨╡╤Б╤В╤М). - **[╨а╨Х╨и╨Х╨Э╨Ю 2026-09-17]** ╨е╨░╤А╨┤╨║╨╛╨┤ `src/` ╤Г╤Б╤В╤А╨░╨╜╤С╨╜: `resolve_src_root()` тАФ ╨┤╨╡╤В╨╡╤А╨╝╨╕╨╜╨╕╤А╨╛╨▓╨░╨╜╨╜╤Л╨╣ ╨┐╤А╨╕╨╛╤А╨╕╤В╨╡╤В (╤П╨▓╨╜╤Л╨╣ `src_dir` тЖТ env `MSCODEBASE_BOOTSTRAP_SRC_DIR` тЖТ ╨╕╨╖╨▓╨╡╤Б╤В╨╜╤Л╨╡ ╤А╨░╤Б╨║╨╗╨░╨┤╨║╨╕ `src/lib/core/libraries/modules` тЖТ ╨║╨░╤В╨░╨╗╨╛╨│ ╤Б ╨╕╨╝╨╡╨╜╨╡╨╝ ╨┐╤А╨╛╨╡╨║╤В╨░ тЖТ ╤Б╤В╨░╤В╨╕╤Б╤В╨╕╤З╨╡╤Б╨║╨╕╨╣ fallback ╤Б ╨╕╤Б╨║╨╗╤О╤З╨╡╨╜╨╕╨╡╨╝ `tests/docs/venv`). ╨Т╨░╨╗╨╕╨┤╨░╤Ж╨╕╤П: MSCodeBaseтЖТsrc, gemma_agentтЖТcore (╤А╨░╨╜╨╡╨╡ ╤В╤А╨╡╨▒╨╛╨▓╨░╨╗ ╨╕╤Б╤В╨╛╤З╨╜╨╕╨║), blackтЖТsrc, httpbinтЖТhttpbin. ╨а╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л ╤Б╨╛╨▓╨┐╨░╨┤╨░╤О╤В ╤Б ╤А╤Г╤З╨╜╤Л╨╝ `src_dir` (1:1). ╨в╨╡╤Б╤В╤Л 14/14, ╨▓ ╤В.╤З. 6 ╨╜╨╛╨▓╤Л╤Е (core-layout/╨╕╨╝╤П-╨┐╤А╨╛╨╡╨║╤В╨░/╤Б╤В╨░╤В╨╕╤Б╤В╨╕╨║╨░/env/╨┐╤А╨╕╨╛╤А╨╕╤В╨╡╤В-env/╨┐╤Г╤Б╤В╨╛╨╣-╨┐╤А╨╛╨│╨╛╨╜). Red Team 3/3 (venv-tests ╨╜╨╡ ╨╖╨░╤Е╨▓╨░╤В╤Л╨▓╨░╤О╤В╤Б╤П ╤Б╤В╨░╤В╨╕╤Б╤В╨╕╨║╨╛╨╣, ╨▒╨╕╤В╤Л╨╣ env ╨╜╨╡ ╨╗╨╛╨╝╨░╨╡╤В, ╨╛╤В╨╜╨╛╤Б╨╕╤В╨╡╨╗╤М╨╜╤Л╨╣ src_dir ╤А╨░╨▒╨╛╤В╨░╨╡╤В). - **[╨и╨░╨│ 3 (Dynamic Trace command) тАФ ╨а╨Х╨Р╨Ы╨Ш╨Ч╨Ю╨Т╨Р╨Э, 2026-09-18]** diff --git a/README.md b/README.md index a9f794be..6bed767e 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ Designed and tested on **Windows**. macOS and Linux should work but have not bee Install the `mscodebase-intelligence` extension in Zed, then: ```bash -cd D:\Project\MSCodeBase +cd python install.py # Quick sync (code only, no prompts): diff --git a/WISDOM.md b/WISDOM.md index d52f76e5..18321de6 100644 --- a/WISDOM.md +++ b/WISDOM.md @@ -90,7 +90,7 @@ остальные 7 hook-скриптов ≈ 10s. «8-минутный коммит» — CPU contention от 2 llama-servers (embed+rerank) при коммите, НЕ медленные тесты. pytest остаётся single-thread, НЕ хтейзить. - Помогать не нужно: временный `pytest --basetemp ` — при параллельных прогонах два pytest - коллизят на общем `pytest-of-misha/pytest-0` → 452 ложных FileNotFoundError (а не баг кода). + коллизят на общем `pytest-of-/pytest-0` → 452 ложных FileNotFoundError (а не баг кода). ## Doc-vs-code semantic drift (2026-08-12) - stale_detector сверяет ТОЛЬКО version-строки — имена тулов/счётчики в доках diff --git a/docs/BENCHMARK_RESULTS.md b/docs/BENCHMARK_RESULTS.md index 11fe3b54..8a072e70 100644 --- a/docs/BENCHMARK_RESULTS.md +++ b/docs/BENCHMARK_RESULTS.md @@ -1,6 +1,6 @@ # Benchmark Results — MSCodeBase Intelligence -*Generated: 2026-07-22 | Project: MSCodeBase (D:\Project\MSCodeBase) | Environment: Windows 11, Python 3.14.3, OpenVINO 2024.x, INT8 multilingual-e5-small* +*Generated: 2026-07-22 | Project: MSCodeBase () | Environment: Windows 11, Python 3.14.3, OpenVINO 2024.x, INT8 multilingual-e5-small* --- @@ -26,7 +26,7 @@ ``` ============================= test session starts ============================= platform win32 -- Python 3.14.3, pytest-9.1.1 -rootdir: D:\Project\MSCodeBase +rootdir: collected 655 items / 202 deselected / 453 selected tests\test_assignments.py .........................sssssssss @@ -96,7 +96,7 @@ FAILED tests/test_index_progress.py::TestIndexerProgressCallback::test_callback_ ``` ====================================================================== -Project: D:\Project\MSCodeBase +Project: ====================================================================== Found 8064 Python files Built graph: 8064 nodes, 197 edges diff --git a/docs/en/INSTALL.md b/docs/en/INSTALL.md index 5f4cb40f..f72a6526 100644 --- a/docs/en/INSTALL.md +++ b/docs/en/INSTALL.md @@ -7,7 +7,7 @@ [🇬🇧 English](INSTALL.md) • [🇷🇺 Русский](../ru/INSTALL.md) • [🇨🇳 中文](../zh/INSTALL.md) > **MSCodebase Intelligence** — MCP server for semantic code search in Zed IDE. -> Runs as a Zed extension. Development in `D:\Project\MSCodeBase`. +> Runs as a Zed extension. Development in ``. --- diff --git a/docs/en/ZED_WINDOWS_QUIRKS.md b/docs/en/ZED_WINDOWS_QUIRKS.md index c3a29bc0..3e6907a4 100644 --- a/docs/en/ZED_WINDOWS_QUIRKS.md +++ b/docs/en/ZED_WINDOWS_QUIRKS.md @@ -23,9 +23,9 @@ Zed protection mechanism. ### How to fix 1. **Press "Trust and Continue"** (or `Enter`) -2. **Check "Trust all projects in D:\Project"** — so you won't +2. **Check "Trust all projects in "** — so you won't see this dialog again for the entire workspace directory -3. **Without this checkbox**, every new project from `D:\Project` will +3. **Without this checkbox**, every new project from `` will show the dialog again ### Why MSCodeBase needs to know this @@ -218,7 +218,7 @@ aggressively, Zed may temporarily freeze its watchers. ### Windows UNC Path Normalization Windows paths may have a `\\?\` prefix (UNC). When comparing paths, -`D:\Project` and `\\?\D:\Project` are considered DIFFERENT strings, but +`` and `\\?\` are considered DIFFERENT strings, but they point to the same directory. **Solution:** Always use `Path(p).resolve()` when comparing paths. diff --git a/docs/en/investigations/LSP_WONTFIX.md b/docs/en/investigations/LSP_WONTFIX.md index b666efc4..e7111360 100644 --- a/docs/en/investigations/LSP_WONTFIX.md +++ b/docs/en/investigations/LSP_WONTFIX.md @@ -3,8 +3,8 @@ [🇬🇧 English](LSP_WONTFIX.md) • [🇨🇳 中文](../../zh/investigations/LSP_WONTFIX.md) **Дата:** 2026-07-05 -**Автор:** AI-Agent (по запросу misha) -**Проект:** `D:\Project\MSCodeBase` — расширение `mscodebase-intelligence` +**Автор:** AI-Agent (по запросу ) +**Проект:** `` — расширение `mscodebase-intelligence` **Версия Zed:** 1.9.0 (Latest, выпущен 01 Jul 2026, коммит `ced90fc`) **Severity:** Medium — функциональность не блокирует релиз, потому что вся семантика уже работает через MCP (50 инструментов, 1540 чанков). LSP добавлял бы только @@ -64,7 +64,7 @@ LM Studio эмбеддинги, SQLite fallback для project resolution). | 8 | `.zed/settings.json` (локальный) с `mscodebase-lsp` | Игнорируется — Zed 1.9.0 не читает per-project settings для LSP | **Исключённые причины:** -- ❌ Restricted Mode — `D:\Project\MSCodeBase` в `trusted_worktrees`. +- ❌ Restricted Mode — `` в `trusted_worktrees`. - ❌ `ZED_WORKTREE_ROOT` = null — обработано SQLite fallback. - ❌ Битый код LSP — работает standalone. - ❌ Python venv — `python.exe` существует, запускается. diff --git a/docs/en/investigations/ONNX_SESSION_REPORT.md b/docs/en/investigations/ONNX_SESSION_REPORT.md index fc4b8d9a..fe78729a 100644 --- a/docs/en/investigations/ONNX_SESSION_REPORT.md +++ b/docs/en/investigations/ONNX_SESSION_REPORT.md @@ -3,8 +3,8 @@ [🇬🇧 English](ONNX_SESSION_REPORT.md) • [🇷🇺 Русский] *(не переведён)* **Дата:** 2026-07-08 — 2026-07-09 -**Автор:** AI-Agent (по запросу misha) -**Проект:** `D:\Project\MSCodeBase` — `mscodebase-intelligence` +**Автор:** AI-Agent (по запросу ) +**Проект:** `` — `mscodebase-intelligence` **Версия:** v2.7.0 (после сессии) **Severity:** High — полный переход с LM Studio на ONNX Runtime, исправление 7 критических багов **Статус:** ✅ Завершено. Все 50 инструментов работают в ONNX-режиме. diff --git a/docs/research/2026-07-11-telemetry-and-metrics.md b/docs/research/2026-07-11-telemetry-and-metrics.md index 07d4c50e..ef35f6e2 100644 --- a/docs/research/2026-07-11-telemetry-and-metrics.md +++ b/docs/research/2026-07-11-telemetry-and-metrics.md @@ -254,9 +254,9 @@ tests/ | **PID** | `14412` | | **Started** | `2026-07-11T19:21:09.802981` | | **Uptime** | `1496.6s` | -| **Source** | `D:\Project\MSCodeBase\src\mcp\server.py` | -| **User** | `misha` | -| **CWD** | `D:\Project\MSCodeBase` | +| **Source** | `\src\mcp\server.py` | +| **User** | `` | +| **CWD** | `` | | **Ext Root** | `%LOCALAPPDATA%\Zed\extensions\mscodebase-intelligence` | --- diff --git a/docs/research/2026-07-11-threads-db-research.md b/docs/research/2026-07-11-threads-db-research.md index 6bbc1adc..4a96ef5c 100644 --- a/docs/research/2026-07-11-threads-db-research.md +++ b/docs/research/2026-07-11-threads-db-research.md @@ -100,7 +100,7 @@ threads.db (SQLite) | **Decompressed** | **11.2 MB** | | **Provider** | opencode | | **Model** | go/deepseek-v4-flash | -| **Project** | D:\Project\MSCodeBase | +| **Project** | | --- diff --git a/docs/research/UNIVERSAL_ENGINE_PLAN.md b/docs/research/UNIVERSAL_ENGINE_PLAN.md index 3a90152f..6848d4c9 100644 --- a/docs/research/UNIVERSAL_ENGINE_PLAN.md +++ b/docs/research/UNIVERSAL_ENGINE_PLAN.md @@ -43,7 +43,7 @@ change; only the surround changes. A rewrite would discard the safety net for no ### D-2. One repo, one feature branch, new packages INSIDE the tree — not a parallel project folder. -- **Phases 0-1** (behavior-preserving refactor): in-place in `D:\Project\MSCodeBase`. +- **Phases 0-1** (behavior-preserving refactor): in-place in ``. - **Phases 2+** (new subsystems): new package dirs inside the SAME repo, developed behind the existing tree, wired through DI, verified by the existing 1398-test suite + `smoke_e2e.py` on every merge: diff --git a/docs/ru/INSTALL.md b/docs/ru/INSTALL.md index cb5346ee..f20a5894 100644 --- a/docs/ru/INSTALL.md +++ b/docs/ru/INSTALL.md @@ -7,7 +7,7 @@ [🇬🇧 English](../en/INSTALL.md) • [🇷🇺 Русский](INSTALL.md) • [🇨🇳 中文](../zh/INSTALL.md) > **MSCodebase Intelligence** — MCP-сервер для семантического поиска кода в Zed IDE. -> Работает как расширение Zed. Разработка в `D:\Project\MSCodeBase`. +> Работает как расширение Zed. Разработка в ``. --- diff --git a/docs/ru/README.md b/docs/ru/README.md index 093b7652..c2e7927d 100644 --- a/docs/ru/README.md +++ b/docs/ru/README.md @@ -126,7 +126,7 @@ MSCodeBase **использует LSP только для `codebase(action="rena Установите расширение `mscodebase-intelligence` в Zed, затем: ```bash -cd D:\Project\MSCodeBase +cd python install.py # Перезапустите Zed (File → Quit → reopen) diff --git a/docs/ru/UNIVERSAL_ENGINE_PLAN.md b/docs/ru/UNIVERSAL_ENGINE_PLAN.md index 36852537..05fda926 100644 --- a/docs/ru/UNIVERSAL_ENGINE_PLAN.md +++ b/docs/ru/UNIVERSAL_ENGINE_PLAN.md @@ -43,7 +43,7 @@ IntelligenceLayer: полтора года протестированного к ### D-2. Один репозиторий, одна фича-ветка, новые пакеты ВНУТРИ дерева — не параллельная папка проекта. -- **Фазы 0-1** (поведенчески-безопасный рефакторинг): на месте, в `D:\Project\MSCodeBase`. +- **Фазы 0-1** (поведенчески-безопасный рефакторинг): на месте, в ``. - **Фазы 2+** (новые подсистемы): новые пакетные каталоги В ТОМ ЖЕ репозитории, за существующим деревом, подключение через DI, верификация существующим набором из 1300 тестов + `smoke_e2e.py` на каждом merge: diff --git a/docs/ru/ZED_WINDOWS_QUIRKS.md b/docs/ru/ZED_WINDOWS_QUIRKS.md index 1316e29e..10083d5d 100644 --- a/docs/ru/ZED_WINDOWS_QUIRKS.md +++ b/docs/ru/ZED_WINDOWS_QUIRKS.md @@ -23,9 +23,9 @@ ### Как исправить 1. **Нажмите "Trust and Continue"** (или `Enter`) -2. **Отметьте "Trust all projects in D:\Project"** — чтобы больше не +2. **Отметьте "Trust all projects in "** — чтобы больше не видеть этот диалог для всей рабочей директории -3. **Без этой отметки** каждый новый проект из `D:\Project` будет +3. **Без этой отметки** каждый новый проект из `` будет показывать диалог заново ### Почему MSCodeBase нужно это знать @@ -219,7 +219,7 @@ Zed блокирует открытые файлы эксклюзивной бл ### Нормализация UNC-путей Windows Пути Windows могут иметь префикс `\\?\` (UNC). При сравнении путей -`D:\Project` и `\\?\D:\Project` считаются РАЗНЫМИ строками, но +`` и `\\?\` считаются РАЗНЫМИ строками, но они указывают на одну и ту же директорию. **Решение:** Всегда используйте `Path(p).resolve()` при сравнении путей. diff --git a/docs/ru/investigations/LSP_WONTFIX.md b/docs/ru/investigations/LSP_WONTFIX.md index ddfda8dc..a43f9b40 100644 --- a/docs/ru/investigations/LSP_WONTFIX.md +++ b/docs/ru/investigations/LSP_WONTFIX.md @@ -3,8 +3,8 @@ [🇬🇧 English](../../en/investigations/LSP_WONTFIX.md) • [🇷🇺 Русский](LSP_WONTFIX.md) • [🇨🇳 中文](../../zh/investigations/LSP_WONTFIX.md) **Дата:** 2026-07-05 -**Автор:** AI-Agent (по запросу misha) -**Проект:** `D:\Project\MSCodeBase` — расширение `mscodebase-intelligence` +**Автор:** AI-Agent (по запросу ) +**Проект:** `` — расширение `mscodebase-intelligence` **Версия Zed:** 1.9.0 (Latest, выпущен 01 Jul 2026, коммит `ced90fc`) **Severity:** Medium — функциональность не блокирует релиз, потому что вся семантика уже работает через MCP (43 инструмента, 1540 чанков). LSP добавлял бы только @@ -55,7 +55,7 @@ LM Studio эмбеддинги, SQLite fallback для project resolution). | 8 | `.zed/settings.json` (локальный) с `mscodebase-lsp` | Игнорируется — Zed 1.9.0 не читает per-project settings для LSP | **Исключённые причины:** -- ❌ Restricted Mode — `D:\Project\MSCodeBase` в `trusted_worktrees`. +- ❌ Restricted Mode — `` в `trusted_worktrees`. - ❌ `ZED_WORKTREE_ROOT` = null — обработано SQLite fallback. - ❌ Битый код LSP — работает standalone. - ❌ Python venv — `python.exe` существует, запускается. diff --git a/docs/zh/INSTALL.md b/docs/zh/INSTALL.md index 5eba54c4..de05d400 100644 --- a/docs/zh/INSTALL.md +++ b/docs/zh/INSTALL.md @@ -7,7 +7,7 @@ [🇬🇧 English](../en/INSTALL.md) • [🇷🇺 Русский](../ru/INSTALL.md) • [🇨🇳 中文](INSTALL.md) > **MSCodebase Intelligence** — 用于 Zed IDE 中语义代码搜索的 MCP 服务器。 -> 作为 Zed 扩展运行。开发目录:`D:\Project\MSCodeBase`。 +> 作为 Zed 扩展运行。开发目录:``。 --- diff --git a/docs/zh/README.md b/docs/zh/README.md index 111c6e04..646b240f 100644 --- a/docs/zh/README.md +++ b/docs/zh/README.md @@ -127,7 +127,7 @@ MSCodeBase **在 `codebase(action="rename")` 中使用 LSP** — LSP 客户端 在 Zed 中安装 `mscodebase-intelligence` 扩展,然后: ```bash -cd D:\Project\MSCodeBase +cd python install.py # 重启 Zed(File → Quit → 重新打开) diff --git a/docs/zh/ZED_WINDOWS_QUIRKS.md b/docs/zh/ZED_WINDOWS_QUIRKS.md index 71a21ec5..9670e460 100644 --- a/docs/zh/ZED_WINDOWS_QUIRKS.md +++ b/docs/zh/ZED_WINDOWS_QUIRKS.md @@ -21,8 +21,8 @@ ### 如何修复 1. **点击"Trust and Continue"**(或按 `Enter`) -2. **勾选"Trust all projects in D:\Project"** — 这样整个工作区目录都不会再看到此对话框 -3. **如果不勾选此复选框**,来自 `D:\Project` 的每个新项目都会再次显示该对话框 +2. **勾选"Trust all projects in "** — 这样整个工作区目录都不会再看到此对话框 +3. **如果不勾选此复选框**,来自 `` 的每个新项目都会再次显示该对话框 ### 为什么 MSCodeBase 需要知道这一点 @@ -187,7 +187,7 @@ Zed 使用排他锁锁定打开的文件。如果第三方进程(索引器、 ### Windows UNC 路径规范化(UNC Path Normalization) -Windows 路径可能有 `\\?\` 前缀(UNC)。比较路径时,`D:\Project` 和 `\\?\D:\Project` 被视为**不同的字符串**,但它们指向同一目录。 +Windows 路径可能有 `\\?\` 前缀(UNC)。比较路径时,`` 和 `\\?\` 被视为**不同的字符串**,但它们指向同一目录。 **解决方案:** 比较路径时始终使用 `Path(p).resolve()`。这会去除 UNC 前缀。 diff --git a/docs/zh/investigations/LSP_WONTFIX.md b/docs/zh/investigations/LSP_WONTFIX.md index 82248a54..5c7e1a4e 100644 --- a/docs/zh/investigations/LSP_WONTFIX.md +++ b/docs/zh/investigations/LSP_WONTFIX.md @@ -3,8 +3,8 @@ [🇬🇧 English](../../en/investigations/LSP_WONTFIX.md) • [🇨🇳 中文](LSP_WONTFIX.md) **日期:** 2026-07-05 -**作者:** AI 代理(应 misha 要求) -**项目:** `D:\Project\MSCodeBase` — 扩展 `mscodebase-intelligence` +**作者:** AI 代理(应 要求) +**项目:** `` — 扩展 `mscodebase-intelligence` **Zed 版本:** 1.9.0(最新版,发布于 2026 年 7 月 1 日,提交 `ced90fc`) **严重性:** 中等 — 该功能不阻塞发布,因为所有语义 已经通过 MCP 工作(50 个工具,1540 个块)。LSP 只会增加 @@ -54,7 +54,7 @@ LM Studio 嵌入、用于项目解析的 SQLite 回退)。 | 8 | `.zed/settings.json`(本地)包含 `mscodebase-lsp` | 被忽略 — Zed 1.9.0 不读取 LSP 的 per-project 设置 | **已排除的原因:** -- ❌ 受限模式 — `D:\Project\MSCodeBase` 在 `trusted_worktrees` 中。 +- ❌ 受限模式 — `` 在 `trusted_worktrees` 中。 - ❌ `ZED_WORKTREE_ROOT` = null — 已通过 SQLite 回退处理。 - ❌ LSP 代码损坏 — 独立运行正常。 - ❌ Python venv — `python.exe` 存在,可启动。 diff --git a/tests/test_no_personal_paths.py b/tests/test_no_personal_paths.py new file mode 100644 index 00000000..a6346ad1 --- /dev/null +++ b/tests/test_no_personal_paths.py @@ -0,0 +1,76 @@ +"""Guard: no personal absolute paths or usernames in human-facing docs. + +Regression guard for F0 (2026-09-26). The public repo must not leak a local +machine layout (`X:\\Project`) or the owner's local username in files a reader +sees. Scope is deliberately human-facing: root docs + docs/**/*.md (excluding +archive/generated) + the opencode plugin. Historical scratch (`experiments/**`, +`scripts/**`, tests, data JSON) is out of scope here — those are handled by a +separate reviewed pass, because edits there are paired with assertions. +""" +from __future__ import annotations + +import re +import subprocess +from pathlib import Path + +import pytest + +REPO = Path(__file__).resolve().parents[1] + +ROOT_DOCS = [ + "README.md", "AGENTS.md", "AI_INSTALLATION_PROMPT.md", + "AGENT_DIARY.md", "EXPERIMENTS_LOG.md", "KNOWN_ISSUES.md", "WISDOM.md", + "CHANGELOG.md", "SECURITY.md", "CONTRIBUTING.md", "CODE_OF_CONDUCT.md", +] +EXCLUDED_DOC_PARTS = ("docs/archive/", "docs/generated/") + +# Owner's local username (split so this test file does not flag itself) and a +# drive-rooted personal project path. `C:\Users\...` (generic) is allowed. +USERNAME = "mis" + "ha" +PATTERNS = [ + re.compile(rf"(? list[str]: + """Only git-tracked files can leak publicly; a gitignored file cannot.""" + try: + out = subprocess.run( + ["git", "ls-files", "-z"], cwd=REPO, capture_output=True, + text=True, encoding="utf-8", + ) + except OSError: + return [] + if out.returncode != 0: + return [] + return [x for x in out.stdout.split("\0") if x] + + +def _in_scope(rel: str) -> bool: + if rel in ROOT_DOCS: + return True + if rel.startswith("docs/") and rel.endswith(".md"): + return not any(rel.startswith(x) for x in EXCLUDED_DOC_PARTS) + if rel.startswith(".opencode/plugin/") and rel.endswith(".ts"): + return True + return False + + +def _doc_files() -> list[Path]: + files = [REPO / r for r in _tracked_files() if _in_scope(r)] + if not files: + pytest.skip("git not available / no tracked docs (clean CI without git)") + return files + + +def test_no_personal_paths_in_docs() -> None: + violations: list[str] = [] + for p in _doc_files(): + text = p.read_text(encoding="utf-8", errors="replace") + for lineno, line in enumerate(text.splitlines(), 1): + for pat in PATTERNS: + if pat.search(line): + rel = p.relative_to(REPO).as_posix() + violations.append(f"{rel}:{lineno}: {line.strip()[:120]}") + assert not violations, "personal path/username leak in docs:\n" + "\n".join(violations) diff --git a/uninstall.bat b/uninstall.bat index 742178df..1b2c23e7 100644 --- a/uninstall.bat +++ b/uninstall.bat @@ -6,7 +6,7 @@ taskkill /f /im python.exe /fi "WINDOWTITLE eq main*" >nul 2>&1 taskkill /f /im llama-server.exe >nul 2>&1 taskkill /f /im onnx_server.exe >nul 2>&1 timeout /t 2 /nobreak >nul -for /l %i in (1,1,3) do (rd /s /q "C:\Users\misha\AppData\Local\Zed\extensions\mscodebase-intelligence" 2>nul & if not exist "C:\Users\misha\AppData\Local\Zed\extensions\mscodebase-intelligence" goto DEL) +for /l %i in (1,1,3) do (rd /s /q "%LOCALAPPDATA%\Zed\extensions\mscodebase-intelligence" 2>nul & if not exist "%LOCALAPPDATA%\Zed\extensions\mscodebase-intelligence" goto DEL) echo Failed. Restart PC and run again. goto END :DEL From 5f158ece719c1e653bb384b518932983866fc7a9 Mon Sep 17 00:00:00 2001 From: MSCodeBase Agent Date: Sat, 26 Sep 2026 13:31:03 +0300 Subject: [PATCH 2/2] docs(experiments): pre-register 4A unit-of-return with agent-confound controls Add experiments/4A_unit_of_return/README.md: frozen 4-arm protocol (top-k / whole-doc / oracle / closed book) plus the confound controls for agent-based apparatus derived from E7/E11/E17/E25 and the 2026-09-25 port incident. Record the design in AGENT_DIARY and the experiments registry. No run yet. --- AGENT_DIARY.md | 7 ++ experiments/4A_unit_of_return/README.md | 90 +++++++++++++++++++++++++ experiments/README.md | 1 + 3 files changed, 98 insertions(+) create mode 100644 experiments/4A_unit_of_return/README.md diff --git a/AGENT_DIARY.md b/AGENT_DIARY.md index d5c6b2c8..a24eed10 100644 --- a/AGENT_DIARY.md +++ b/AGENT_DIARY.md @@ -52,6 +52,13 @@ - **Чёрные окна 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] Конфунды агентной аппаратуры + pre-registered 4-arm (P1 Tom) +**Status:** 🟡 Дизайн заморожен, прогона нет. +**Root Cause вопроса:** «повлияет ли запуск чистых opencode-агентов/субагентов на эксперимент» — да, и в репо уже 6 каналов: (1) модель/budget читателя (E7: deepseek-low провалил NONE; qwen 8/10 vs longcat 4/10); (2) судья видит артефакт плеча (E17 v2: p=0.0046 → p=1.00); (3) самооценка генератор=судья (Tom 4727138); (4) аппаратура рапортует успех при мёртвом инструменте (E17 pilot 120/120 Error 500; Tom exit 0); (5) лёгкий контроль (E17 v6→v7 rho +0.54→не воспроизвёлся; Tom 4744919 hard-negative); (6) конкуренция за :8080/:8081 (инцидент 2026-09-25 — devbase-MCP убил наш сервер). +**Fix/design:** `experiments/4A_unit_of_return/README.md` — протокол `3fj0o` (top-k / whole-doc / oracle / **closed book**) + контуры §3-4 (изоляция data-root, MCP off, разные шарды генерации/судьи, manifest с моделью+budget, ≥5 прогонов, hard negatives, referent у каждого числа). Стоп-условние G6: свежий замороженный набор (панель 35 видели). +**Нельзя:** коммит в main, мутация живого индекса, смена ретривера после увиденного. +**Триггер:** протокол Tom `3fj0o` (dev.to) + вопрос владельца. + ## [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`). diff --git a/experiments/4A_unit_of_return/README.md b/experiments/4A_unit_of_return/README.md new file mode 100644 index 00000000..bdfc8ceb --- /dev/null +++ b/experiments/4A_unit_of_return/README.md @@ -0,0 +1,90 @@ +# 4A — Unit of return + контуры против confound'ов агентной аппаратуры + +**Статус:** 🟡 pre-registered (дизайн заморожен, прогона нет). +**Повод:** протокол Tom Jones `3fj0o` («four arms, everything else frozen», замок сверху — closed book) + вопрос владельца: **будет ли запуск чистых opencode-агентов/субагентов как-то влиять на эксперимент.** +**Короткий ответ:** ДА. В этом репо уже зафиксированы 6 каналов влияния (E7, E11, E17, E25, инцидент портов). Ниже — они и обязательные контуры. Дизайн без этих контуров повторяет ошибки, которые мы уже совершали. + +--- + +## 0. Почему именно этот эксперимент + +`3fj0o` — единственный протокол Tom, который меряет **не качество модели, а свойство системы** (что доходит до читателя). Он даёт число, которого у нас нет: **на каком документе останавливается top-1**. У Tom — 0/14. У нас — неизвестно, и это прямо проверяемо на нашем индексе. Плюс он проверяет его предсказание о **двух популяциях** (код vs проза) — у нас есть оба корпуса в одном репо (код + `docs/**`). + +--- + +## 1. Плечи (заморожены) + +| # | Что читателю | Роль | +|---|---|---| +| A | top-k чанков (текущий деплой) | baseline | +| B | top-1 целого документа (единица под тестом) | гипотеза | +| C | oracle-файл, нарезанный на чанки | потолок: ретрив или единица | +| D | **ничего** (closed book) | контроль, который никто не ставит | + +**Заморозить ДО прогона:** ретривер, top-10, список запросов, судью, число прогонов (1/плечо на прогон), n на популяцию. Отличается **только** единица возврата. +**Популяции разделить ДО просмотра результатов:** `code` (чанки кода) и `prose` (корпус `docs/**`). +**Предказание (проверяемое):** проза — whole-doc на уровне closed book или ниже; код — нет. Если обе сдвинулись одинаково — двухпопуляционная история Tom на нашем индексе неверна, сообщаем независимо от исхода. +**Стоп-условие G6:** панель из 35 запросов мы уже видели → только свежий замороженный набор, иначе явная пометка `in-sample`. + +--- + +## 2. Единица возврата — обязательные поля каждого числа (referent) + +Каждое число в отчёте несёт: **популяция / размер корпуса / candidate set / число прогонов / судья / полоса шума**. +Без этого число не цитируется. Прямое требование carbonlayer (`4342379`) и урок EXP-23 в devbase (662 vs 761 — «разные вопросы»). + +--- + +## 3. Каналы, через которые агентная аппаратура портит эксперимент (наш опыт) + +| # | Канал | Наш экземпляр (verified в репо) | Контур (guard) | +|---|---|---|---| +| 1 | **Модель/reasoning читателя меняет результат** | E7 (Exp 19): deepseek-low провалил 2/3 NONE-контроля; qwen 8/10 vs longcat 4/10 на том же индексе | фиксировать модель И budget в манифесте; валидность per-reader, не per-index; ≥5 прогонов | +| 2 | **Судья видит артефакт плеча → фабрикует эффект** | E17 v2: судья видел тесты каждого плеча → «completeness B>A p=0.0046»; убрали конфаунд → p=1.00 | reference судьи ИДЕНТИЧЕН по плечам; маппинг плеч не попадает в шарды судьи; слепые токены | +| 3 | **Генератор = судья (самооценка)** | seat-модель Tom `4727138`: «orchestrator that implements grades its own homework»; E17: отдельные шарды на генерацию/суд | генератор и судья — разные контексты; никто не судит свой ответ | +| 4 | **Аппаратура рапортует успех, ничего не сделав** | E17 pilot: 120/120 `Error 500`, извлечение имён сломано → пилот невалиден; Tom `4727138`: exit 0 при мёртвом поиске | `verify_data` + live-smoke ДО прогона; decoy-audit; отрицательный контроль «инструмент умеет падать» | +| 5 | **Слишком лёгкий контроль** | E17 v6→v7: rho=+0.54 не воспроизвёлся (n=24, артефакт); Tom `4744919`: эффект жил в зазоре random vs hard-negative | hard negatives обязательны; репликация на held-out; decoys (0/139) | +| 6 | **Конкуренция за ресурсы (порты/индекс)** | инцидент 2026-09-25: devbase-MCP поднял свой llama-server на **:8080/:8081** → наш MSCodeBase-сервер умер mid-parse; `.agent_task_state` требует reload | изолированный `MSCODEBASE_DATA_DIR`; не поднимать чужие MCP; проверять :8080/:8081 перед прогоном; убивать чужие серверы агентов после | + +Дополнительно (методология, уже в WISDOM): **средство измерения обязано сначала сработать** (EXP-22 «пустой эксперимент»); **параллельность под реалистичной нагрузкой** (E25: `-n 4` дал ложный вывод «~15%», `-n auto` — ×2.76). + +--- + +## 4. Runbook: как запускать чистого агента, не портя результат + +1. **Проверить живость:** `debug_runtime_passport()`; `netstat` на :8080/:8081 — чужой llm не должен занимать порты нашего прогона. +2. **Изоляция:** `MSCODEBASE_DATA_DIR=` (индекс не трогаем); рабочие папки агентов — `%TEMP%/opencode//`, MCP **off**, пустой корень. +3. **Шардинг:** генерация и суд — разные шарды; никакого общего контекста; opaque-токены вместо имён плеч. +4. **До прогона:** `verify_data` + decoy-audit + negative-control; записать манифест (модель, budget, n, seed). +5. **После:** убить все процессы агентов/llama; проверить, что индекс и БД не изменились; **не коммитить** артефакты с ПД/секретами; redaction на выходе (E9). +6. **Нельзя:** `git commit` в main без PR; удалять/пересобирать живой индекс; менять ретривер ради «лучшего» результата (это тюнинг под увиденное). + +**Риск «всё испортить»** закрывается read-only + изолированный data-root + отсутствие MCP в шардах + запрет на commit. Индекс `.codebase_indices` не пишется — только чтение. + +--- + +## 5. Артефакты и метрики + +- Заморозить: `queries.json` (+sha256), `manifest.json` (retriever/top-10/judge/model/budget/n), `populations.json`. +- Метрики на плечо: hit@1 / hit@3 / **top-1-doc-is-gold** / токены контекста / доля запросов с релевантным покрытием. +- Полоса шума: измерить повторным прогоном, ДО выводов (у Tom floor 2 пункта на n=14). +- Публиковать и провал контролей, и любой FP — не удалять (Tom: удаление = тюнинг под увиденное). + +--- + +## 6. Что берём из этого в следующие шаги + +- Это **P1** (4-arm). **P3** (hard-negative + restore-counterfactual) — обязательный слой внутри плеча B и D. +- **P2** (alias-list vs model-lookup) — отдельный эксперимент, требует наш симптом-реестр; сюда не входит. +- Не начинать, пока: MCP не поднят, нет свежего (<набора), не зафиксирован судья. Иначе — вторая ошибка E7 (валидность ≠ индекс). + +--- + +## 7. Ledger (дизайн) + +| # | Утверждение | Источник | Статус | +|---|---|---|---| +| 1 | Агентная аппаратура влияет на эксперимент | E7/E11/E17/E25 + порты | ✅ (наш репо) | +| 2 | Контуры из §3 достаточны для 4-arm | — | ⏳ не проверено прогоном | +| 3 | Протокол `3fj0o` применим к нашему индексу | `3fj0o` | ⏳ протокол получен, прогона нет | +| 4 | У нас есть gold Q→file для code-популяции | benchmark2/35-panel | ⏳ требует свежего набора (G6) | diff --git a/experiments/README.md b/experiments/README.md index 3d12aab1..cff653be 100644 --- a/experiments/README.md +++ b/experiments/README.md @@ -28,6 +28,7 @@ | Late Enrichment | Late code chunking (WS3) | [`late_enrichment/`](late_enrichment/) | 🟡 исследование | imports=0.0 — находка, KNOWN_ISSUES | | Benchmark D | Контекстный бенчмарк (12 задач L3-L5) | [`benchmark2/`](benchmark2/) | ✅ 2026-08-08 | runner.py + tasks.jsonl + README | | Probes | Одноразовые пробы (без отчётов) | [`misc_probes/`](misc_probes/) | — | см. README папки | +| **4A** | Unit of return (4-arm, протокол Tom `3fj0o`) + контуры против конфундов агентной аппаратуры | [`4A_unit_of_return/`](4A_unit_of_return/) | 🟡 pre-registered 2026-09-26 | top-k / whole-doc / oracle / **closed book**; аппаратура влияет — 6 каналов (E7/E11/E17/E25/порты) | ## Исследовательские заметки (в корне experiments/, не эксперименты)