Skip to content

feat(install): host-neutral install, --doctor/--clean, docs=code (G5-G7) - #119

Closed
ManSio wants to merge 10 commits into
mainfrom
feat/goal2-g5-universal-install
Closed

ManSio wants to merge 10 commits into
mainfrom
feat/goal2-g5-universal-install

Conversation

@ManSio

@ManSio ManSio commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

What changed

Цель 2 целиком: установка отвязана от Zed (G5), появились инвентарь и полное
удаление данных (G6), документация приведена к коду и получила механический guard
(G7). Все части правят один install.py, поэтому один PR с тремя разделами.

CI: 7/7 jobs success — run 43092017919 на head 20f287b
(test ubuntu + windows, clean-state, manifest-parity, secret-scan,
docker-build, transport-equiv-e2e).

G5 — универсальная установка

  • install.py v3.2: MSCODEBASE_INSTALL_ROOT + resolve_install_root() — каталог
    установки отвязан от Zed (исторический путь остаётся default).
  • Zed-адаптер не импортируется на верхнем уровне: step_zed/step_zedcfg делают
    ленивый импорт, отказ адаптера не роняет установку, --no-zed — нейтральный режим.
  • install.py --print-config --client {generic,opencode,zed,claude-code,cursor}
    печатает один JSON: команда
    <install-root>/venv/Scripts/mscodebase-mcp.exe -u -m src.main, PYTHONPATH,
    PROJECT_PATH, PYTHONUTF8=1. Формы конвертов — adapters/clients/snippets.py
    (Zed-ключи сверены с adapters/zed/zed_config.py::_make_server_entry).
  • scripts/verify_client_snippets.py запускает каждый сниппет и делает MCP
    initialize + tools/list. В CI это отдельный шаг на чистом раннере.

Локальный замер (2026-11-12):

generic      PASS: server=MSCodebase Intelligence Server tools=17
opencode     PASS: server=MSCodebase Intelligence Server tools=17
zed          PASS: server=MSCodebase Intelligence Server tools=17
claude-code  PASS: server=MSCodebase Intelligence Server tools=17
cursor       PASS: server=MSCodebase Intelligence Server tools=17

tools=17 — профиль core.

G6 — гигиена данных

  • install.py --doctor [--json]: python/venv, install root, data root, проектные
    артефакты, число чанков в chunks.db, размеры через os.walk, без создания каталогов.
  • install.py --clean [--dry-run] [--yes] [--json]: удаление по слоям
    (install root / data root / .mscodebase / .codebase_indices / .codebase /
    .codebase_models), guard'ы на исходный чекаут, корень ФС, домашний каталог;
    exit 1 при остатке (заблокированные файлы).
  • Модели opt-in: models_enabled() + --with-models; дефолт text-first и без сети.
    --skip-models/--no-models совместимы.
  • docs/{en,ru,zh}/DATA_MAP.md: каждый путь, владелец, назначение, размер, политика.

Реальный прогон --doctor (2026-11-12):

+ install_root              3.0 GB  28429 file(s)
+ data_root               302.9 MB   2934 file(s)
+ project_chunks           78.0 MB      4 file(s)
+ project_models          960.1 MB     18 file(s)
index           7278 chunk(s)
total           4.3 GB over 31385 file(s)

Политики из кода: логи 2 MB × 3 файла, 7 дней (log_manager._MAX_LOG_BYTES,
_MAX_LOG_FILES, _LOG_RETENTION_DAYS); телеметрия 90 д, неактивные проектные
папки 30 д (artifact_gc.DEFAULT_*); клоны репозиториев LRU(5) + 24 ч
(git_url.DEFAULT_MAX_ENTRIES, DEFAULT_TTL_SEC).

G7 — документация = код

  • scripts/check_docs_vs_installer.py: каждый install.py --flag и --client X
    в README/docs обязан существовать в install.py / adapters/clients/snippets.py;
    пустой корпус = exit 2 («не доказано»). Сейчас: 162 flag reference(s) checked, 0 problem(s). На дореформенном docs/en/INSTALL.md из main тот же guard печатает
    ✗ unknown installer flag --uninstall.
  • .github/pull_request_template.md: таблица «изменённая строка docs → файл:символ»,
    обязательная колонка Entry point.
  • AGENTS.md §8: правило + ссылка на guard.

Documentation = code

Changed doc Code fact Verified by
docs/*/INSTALL.md §7: --clean --yes вместо --uninstall install.py::_mode_from_argv (флага --uninstall нет) python install.py --help; guard на старом файле → ✗ --uninstall
docs/*/INSTALL.md, INSTALL_MODELS.md, SYSTEM_REQUIREMENTS.md, CONTRIBUTING.md, FAQ.md: модели только по --with-models install.py::models_enabled, step_models, step_gguf tests/test_install_cli.py::test_models_are_opt_in, test_text_first_default_skips_downloads
README.md / docs/*/README.md: quick start и 4 слоя данных install.py::_print_config, _doctor_report; src/core/artifact_paths.py вывод --print-config и --doctor выше
docs/*/CLIENTS.md: секции 5 клиентов adapters/clients/snippets.py::snapshot scripts/verify_client_snippets.py (5/5 PASS)
adapters/clients/*.json: PROJECT_PATH, PYTHONUTF8, <install-root> install.py::_print_config env --print-config --client claude-code; tests/test_cli.py (контракт адаптера сохранён)
adapters/clients/README.md: cwd → PROJECT_PATH src/main.py читает MSCODEBASE_PROJECT_PATH/PROJECT_PATH grep по src/main.py, env сниппета
AI_INSTALLATION_PROMPT.md: баннер «Zed-специфичный, актуальное — INSTALL.md» install.py v3.2 --help, guard

Gates

python -m pytest tests/ -q            -> 2489 passed, 9 skipped (98.9 s, -n auto)
ruff check src/ tests/                -> All checks passed
python scripts/check_docs_vs_installer.py -> 162 checked, 0 problems
pre-commit (14 gates, MSCB_PRECOMMIT_FAST=1: gate-zero = тот же полный suite, CI его гоняет)
CI run 43092017919                     -> 7/7 jobs success

Tests that can fail (red first)

  • test_print_config_is_valid_json_per_client[*] — мутация PYTHONPATH → 5 красных.
  • test_clean_yes_leaves_zero_residue — мутация «не удалять» → assert 1 == 0.
  • test_real_sync_install_then_doctor_then_clean_leaves_zero — реальный
    --sync-only (871 файл / 18.7 MB / 3.1 s) → --doctor → --clean --yes →
    remaining_bytes == 0.
  • tests/test_docs_vs_installer.py — 5 тестов, включая «пустой корпус ≠ pass».

Risks / not verified

  • «Холодная машина» проверена на CI-раннерах (ubuntu + windows) шагом
    Client snippets cold start (G5), а не вручную на новой ОС.
  • --clean в реальном профиле удаляет кэши всех проектов — задумано, требует
    --dry-run/--yes.
  • Смысловые утверждения документации проверены выборочно (список выше); guard ловит
    только флаги/имена клиентов, не формулировки.

G5: install root is MSCODEBASE_INSTALL_ROOT (legacy Zed path stays default),
Zed adapter is imported lazily and is optional (--no-zed), and
--print-config --client {generic,opencode,zed,claude-code,cursor} prints a
copy-paste stdio snippet. scripts/verify_client_snippets.py launches each
snippet and completes an MCP initialize + tools/list (5/5 PASS, tools=17).

G6: --doctor [--json] reports versions, paths, sizes and chunk count per
layer; --clean [--dry-run] [--yes] removes install root, data root and
project artifacts with path guards and a residual check. Models are opt-in
(--with-models); the default install is text-first and offline.

G7: docs/{en,ru,zh}/DATA_MAP.md documents every path with measured sizes and
retention policies; scripts/check_docs_vs_installer.py fails when docs name
an installer flag or client that does not exist; PR template carries the
docs-to-code checklist.
@coderabbitai

coderabbitai Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Important

  • Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: d1e15d27-aef8-44e7-a429-f9dd293a1f77
Pre-merge checks: Passed 1 · Inconclusive 1

Failed Failed checks: 1 inconclusive

Check name Status Explanation Resolution
Title check Pending This assessment has not completed. The check will be retried on the next pre-merge check run.
Passed Passed checks: 1 passed

Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@ManSio

ManSio commented Nov 11, 2026

Copy link
Copy Markdown
Owner Author

Superseded by the per-goal split: #120 (G5, base main), #121 (G6, base goal2-g5), #122 (G7, base goal2-g6). This combined PR is closed, not merged.

@ManSio ManSio closed this Nov 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant