|
All checks were successful
CI / changes (pull_request) Successful in 11s
CI Trade-In / changes (pull_request) Successful in 11s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 3m1s
CI / backend-tests (pull_request) Successful in 16m4s
One layer's caught DB error left the shared §22 report Session in Postgres's "aborted transaction" state with no rollback, silently emptying every later layer on the same report. Wrap each failure point in db.begin_nested() (SAVEPOINT): orchestrator._safe_call, macro_series _query_key_rate_monthly / _query_inflation_monthly / _query_mortgage_monthly (per indicator), special_indices._run (per index), and sales_series _query_source_a / _query_source_b — so a sibling builder's failure no longer cascades. Also close the RELEASE-SAVEPOINT trap: inner helpers that swallowed a db.execute failure without their own savepoint left the tx aborted, so the outer builder's savepoint failed at RELEASE (illegal in an aborted tx) and poisoning still cascaded. Add savepoints at the inner catch sites — special_indices._query_parcel_centroid and district_resolver._admin_names / resolve_objective_districts. Refs #2464 (cluster A session-poisoning). |
||
|---|---|---|
| .claude | ||
| .design-sync | ||
| .forgejo/workflows | ||
| .github/workflows | ||
| auth | ||
| backend | ||
| caddy | ||
| data | ||
| docs | ||
| frontend | ||
| memory | ||
| ops | ||
| preview | ||
| scripts | ||
| site-finder | ||
| tradein-mvp | ||
| .editorconfig | ||
| .env.example | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .worktreeinclude | ||
| Caddyfile | ||
| CLAUDE.md | ||
| docker-compose.obsidian.yml | ||
| docker-compose.prod.yml | ||
| docker-compose.uptime.yml | ||
| docker-compose.yml | ||
| Makefile | ||
| README.md | ||
GenDesign — Site Finder + Trade-In «Мера»
Несколько продуктовых линий для девелоперов и риелторов РФ в одном монорепо:
- Site Finder v2 «Foresight» — AI-подбор инвестиционных земельных участков + прогноз продуктовой стратегии («GG-форсайт»: спрос/предложение, сценарии, что строить, gate-вердикт по ПЗЗ/ЗОУИТ/ОКН).
- Trade-In «Мера» — оценка выкупной стоимости вторичного жилья (адрес → оценка по аналогам и реальным сделкам, PDF-отчёт, white-label).
tradein-mvp/, отдельный пайплайн. - Generative Design — автоматическая генерация концепций застройки (на ранней стадии).
Целевой регион Discovery — Свердловская обл. (ЕКБ, ПЗЗ, МСК-66).
North Star
К концу месяца 3: 3 платящих пилота (≥30 тыс. ₽/мес каждый) + заявка в реестр российского ПО → право на Раунд А (20–25 млн ₽).
Текущий статус (июнь 2026)
Live: https://gendsgn.ru/ — HTTP/2+HTTP/3, валидный TLS, /health {"status":"ok"}. Полный CI/CD: Forgejo Actions (git.gendsgn.ru) → GHCR → SSH-deploy на Beget VPS (миграция с GitHub Actions 16 мая 2026). Sentry/GlitchTip активен (release tracking привязан к git-sha).
| Слой | Статус |
|---|---|
Site Finder v2 «Foresight» (/site-finder) — анализ участка по cad_num, карта by-bbox, forecast-движок |
✅ live |
↳ Forecast-движок (/parcels/{cad}/forecast + /analyze): спрос/предложение, сценарии, confidence, affordability, rate-sensitivity, продуктовое ТЗ |
✅ (backend/app/services/forecasting/*, фронт Section6Forecast + ScenariosBlock + ForecastConfidenceBlock) |
↳ Gate-вердикт ПЗЗ/ЗОУИТ/ОКН (gate_verdict) + ИРД-overlay/analyze |
✅ backend (gate_verdict.py, ird_overlay_lookup.py, ird_analyze.py); фронт GateVerdictBanner |
↳ Конкуренты / best-layouts / изохроны (/parcels/{cad}/competitors, /best-layouts, /isochrones) |
✅ live |
Trade-In «Мера» (/trade-in) — оценка вторички по аналогам + реальным сделкам, PDF, white-label |
✅ live (tradein-mvp/, отдельный стек/пайплайн) |
| ↳ Скрейперы аналогов: Avito / Cian / Domclick / Yandex.Realty (+ детальные парсеры, browser-fetcher) | ✅ |
| ↳ SberIndex time-adjust (city-level вторичный индекс цен) + Rosreestr ДКП-сделки + ДаДата/геокодер | ✅ |
Аналитический калькулятор /analytics/recommend (Tier 3 per-bucket эластичность, кадастр vs рынок) |
✅ |
| DOM.РФ kn-API скрейпер (строящиеся ЖК Свердл, sale_graph + infra + photos) | ✅ Celery beat + admin UI |
| NSPD geo bulk-fetcher (rosreestr2coord lite, без Playwright) | ✅ admin UI с per-target логами |
| Rosreestr CSV-сделки (квартирные партиции, ~7M строк, 27 мес истории) | ✅ |
| NSPD кадастровые кварталы + здания ЕКБ | ✅ Celery beat + admin UI |
| OSM ekb_districts_geom (PostGIS-полигоны районов ЕКБ) | ✅ |
| Objective ETL (Anton SQLite → PG, ports на psycopg v3) | ✅ admin UI |
Uptime Kuma мониторинг (status.gendsgn.ru, отдельный стек) |
✅ |
Obsidian Self-hosted LiveSync vault на obsidian.gendsgn.ru |
✅ multi-device sync |
Concept page (/concept) — Generative Design |
🟡 skeleton |
Backlog: Forgejo Issues (трекаемые задачи с PR-связью) + Obsidian vault (планы, ADR, research — см. ниже про разделение).
Quick start (локально)
Требования: Docker Desktop, Node.js 20+, uv для backend dev.
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
docker compose up -d --build
curl http://localhost:8000/health # → {"status":"ok","environment":"dev"}
# Frontend: http://localhost:3000
# Swagger: http://localhost:8000/docs
Полезные make-таргеты: logs, backend-shell, migrate, test, lint, typecheck, codegen (TS-типы из OpenAPI).
Архитектура
Backend: Python 3.12, FastAPI, SQLAlchemy 2.0, GeoAlchemy2, Pydantic v2, Celery + Redis, httpx, Shapely 2, scikit-learn.
БД: PostgreSQL 16 + PostGIS 3.4 (партиционированные rosreestr_deals, GIST на geom-полях, ~50 предметных таблиц).
Frontend: Next.js 15, React 19, TypeScript 5, Tailwind 4, TanStack Query, Leaflet/Mapbox, ECharts.
Экспорт: WeasyPrint (PDF), ezdxf (DXF), openpyxl (Excel).
Dev: uv lockfile, ruff, mypy strict (на core + generative), pytest, pre-commit hooks.
Структура монорепо:
backend/ FastAPI app, services (analytics_queries, scrapers, generative, site_finder, forecasting), workers (Celery)
frontend/ Next.js app router (analytics, admin, concept, site-finder + forecast/scenarios компоненты)
tradein-mvp/ Trade-In «Мера» — standalone стек (FastAPI + Next.js + Postgres + Caddy), скрейперы вторички, PDF-оценка
site-finder/ standalone pipeline-скрипты SF v1 (01–12_*.py загрузка/скоринг) + server.py (Leaflet UI на SQLite-кэше)
auth/ roles.yaml — RBAC (single source of truth, bind-mount в main + tradein backend)
caddy/ users.caddy.snippet — basic-auth snippet для Caddy
preview/ статичные HTML-макеты (analytics / landing / monitoring / site-finder)
data/sql/ ETL артефакты — миграции схемы, загрузчики rosreestr/anton/nspd
ops/ backup.sh + deploy скрипты
scripts/ утилиты (migrate_kg_to_obsidian.py, setup-couchdb.sh, cleanup_ghosts.py)
docs/ стратегические снапшоты (актуальное knowledge — в Obsidian vault)
memory/ legacy JSONL knowledge graph (deprecated, не обновляется — данные в Obsidian)
docker-compose.prod.yml main стек (backend, frontend, postgres, redis, worker, beat, caddy)
docker-compose.obsidian.yml obsidian-стек (CouchDB) — деплоится отдельно
docker-compose.uptime.yml Uptime Kuma мониторинг (status.gendsgn.ru) — отдельный стек, запуск вручную
.forgejo/workflows/ (Forgejo Actions — основной CI/CD после миграции 16.05.2026)
├── ci.yml lint (ruff) + mypy + pytest на PR
├── deploy.yml main → пересборка backend/frontend образов + auto-apply data/sql/*.sql + SSH deploy
├── deploy-tradein.yml tradein-mvp стек (отдельный пайплайн + свой _schema_migrations)
└── stale-claims.yml авто-снятие протухших claim-меток в bot-пайплайне
.github/workflows/ (остаточные — только obsidian-стек на GitHub)
└── deploy-obsidian.yml obsidian-стек (CouchDB compose changes + bootstrap)
Аналитика — что доступно
В прод-БД ~50 предметных таблиц:
domrf_kn_*— DOM.РФ объекты, квартиры, sale_graph, infrastructure, photos (1500+ ЖК Свердл).rosreestr_deals— партиционированные ДДУ/ДКП-сделки 2024Q1—2026Q1, ~7M строк, 27 мес истории.cad_quarters_geom+cad_buildings— NSPD кадастровые кварталы и здания (cost_value, year_built, floors, geom).ekb_districts_geom— PostGIS-полигоны OSM для spatial-join.cbr_mortgage_series,yandex_realty_zk,domrf_realization,sber_ddf_metrics— макро/cross-validation.
Калькулятор /analytics/recommend считает квартирографию (5 size-бакетов) с per-bucket эластичностью через регрессию sale_graph, нормировкой на район/класс/конкурентов, кадастр-vs-рынок cross-check, и инверсным режимом «требуемая цена для срока X мес».
Подробное описание схемы БД, helper-views, FK и 27.04 history — в Obsidian vault: domains/analytics/Analytics_Dashboard_Apr27, domains/domrf/events/DomRF_Lazy_Loaded_Apr27_2026, events/Anton_Imported_Apr27_2026, domains/cadastre/Cad_Quarter_Backfill_Apr30. См. также data/sql/*.sql (DDL артефакты).
Site Finder v2 «Foresight» — что доступно
Анализ инвестиционного участка по кадастровому номеру: карта (/parcels/by-bbox), запуск анализа (POST /parcels/{cad}/analyze), прогнозный движок (GET /parcels/{cad}/forecast + экспорт). Бизнес-логика — backend/app/services/site_finder/* и backend/app/services/forecasting/*.
- Forecast-движок (
forecasting/orchestrator.py): прогноз спроса/предложения (demand_supply_forecast), сценарии (scenarios), оценка уверенности (confidence_engine), доступность (affordability), чувствительность к ставке (rate_sensitivity), продуктовый скоринг и «что строить» (product_scoring,what_to_build). Фронт:Section6Forecast,ScenariosBlock,ForecastChart,ForecastConfidenceBlock,ForecastHorizonsBlock,ForecastProductTzBlock. - Gate-вердикт: проверка регуляторных ограничений ПЗЗ/ЗОУИТ/ОКН (
gate_verdict.py,pzz_loader,zone_regulation,okn_lookup) → баннер вердикта на фронте (GateVerdictBanner). - ИРД (исходно-разрешительная документация): overlay-lookup + анализ на backend (
ird_overlay_lookup.py,ird_analyze.py). - Соседство/контекст: конкуренты (
POST /parcels/{cad}/competitors), лучшие планировки (/best-layouts+ PDF), изохроны (/isochrones), POI-скоринг, КРТ/резервирование/network-обременения.
site-finder/ (отдельная папка) — это standalone-пайплайн SF v1: скрипты 01_…12_*.py (загрузка участков, fetch POI, скоринг v1/v2, отчёты) + server.py (Leaflet-UI поверх SQLite-кэша POI). Это исследовательский прекурсор прод-движка в backend/, не путать с прод-API.
Trade-In «Мера» — оценка вторички
Отдельный продукт в tradein-mvp/ (standalone стек: FastAPI + Next.js 15 + Postgres + Caddy, свой deploy-tradein.yml). Дефолтный бренд переименован «Trade-In» → «Мера» (white-label-бренды клиентов резолвятся по slug из таблицы brands; URL-пути /trade-in/* и code-идентификаторы сохранены).
Поток: адрес → геокодер (ДаДата) → подбор аналогов в радиусе (PostGIS ST_DWithin) → оценка → PDF-отчёт (WeasyPrint, layout по референсу «Брусника.Обмен»).
- Источники аналогов: скрейперы Avito / Cian / Domclick / Yandex.Realty (
backend/app/services/scrapers/*, с детальными парсерами иbrowser_fetcher). - Реальные сделки: Rosreestr ДКП-поллинг (
rosreestr_poll.py). - Time-adjust: SberIndex city-level вторичный индекс цен (
sber_index.py) — приведение разновременных аналогов/сделок к текущему месяцу. - Оценка (
estimator.py): SQL-агрегация поверх listings + deals, Tukey-фильтр выбросов (1.5×IQR), медиана/Q1/Q3 + confidence; больше не mock. - API:
POST /api/v1/trade-in/estimate,GET …/estimate/{id},GET …/estimate/{id}/pdf. Multi-tenant:/api/v1/brand/{slug}, RBAC черезauth/roles.yaml.
Подробнее — tradein-mvp/README.md и tradein-mvp/DEPLOY.md.
Production хостинг
Beget Cloud, Москва, 2 vCPU / 4 GB / 40 GB NVMe. Стоимость ~1 140 ₽/мес сервер + ~17 ₽/мес домен.
Два изолированных стека через docker compose, общая Docker network gendesign_shared:
-
Main стек (
docker-compose.prod.yml, projectgendesign):postgres+redis+backend(FastAPI) +worker+beat(Celery, Chromium только в worker) +frontend+caddy(auto-TLS Let's Encrypt). Backend/frontend bind на127.0.0.1— наружу только Caddy. -
Obsidian стек (
docker-compose.obsidian.yml, projectgendesign-obsidian):couchdb:3— Self-hosted LiveSync remote для multi-device sync vault'а наobsidian.gendsgn.ru. Caddy в main-стеке маршрутизирует черезgendesign_sharednetwork.
Split deploy — изменения в main НЕ перезагружают obsidian (и наоборот). Каждый стек со своим workflow.
SSH-only по ключу к non-root пользователю gendesign, fail2ban активен. UFW: 22/80/443.
Forgejo Actions deploys (self-hosted git.gendsgn.ru, мигрировано с GitHub Actions 16.05.2026):
.forgejo/workflows/ci.yml— на PR: ruff lint + mypy (selective strict) + pytest. Блокирует merge при провале..forgejo/workflows/deploy.yml— main: триггер наbackend/**,frontend/**,Caddyfile,docker-compose.prod.yml,data/sql/**. Build backend lean + worker-with-chromium + frontend → push в приватный GHCR → SSHgit reset --hard, auto-apply pendingdata/sql/NN_*.sqlчерез_schema_migrations(idempotent, см. ниже про миграции), sedSENTRY_RELEASE=$IMAGE_TAGвbackend/.env.runtime,compose pull && up -d,caddy reload,curl /health..forgejo/workflows/deploy-tradein.yml— tradein-mvp стек (отдельный пайплайн)..forgejo/workflows/deploy-obsidian.yml— obsidian: триггер наdocker-compose.obsidian.yml,scripts/setup-couchdb.sh,docs/obsidian-livesync.md. Без сборки образов (couchdb:3 с DockerHub), SSHcompose up -d+ idempotent bootstrap (CORS, DB, лимиты). (до 2026-07-05 ошибочно лежал в.github/workflows/— там ни разу не исполнился, см. issue #2416; контейнер держался вручную.)
Forgejo Secrets / Variables: DEPLOY_HOST, DEPLOY_USER, DEPLOY_SSH_KEY, DEPLOY_PORT. Сервер авторизуется в GHCR однократно через PAT с read:packages. COUCHDB_USER/COUCHDB_PASSWORD — в backend/.env.runtime на VPS (не в репе).
Миграции БД — _schema_migrations, не Alembic
Схема развивается через идемпотентные data/sql/NN_*.sql (CREATE … IF NOT EXISTS, guarded DO-блоки). deploy.yml перед compose up прогоняет файлы в лексикографическом порядке, отмечая применённые в таблице-трекере _schema_migrations (применяется ровно один раз каждый). Каталог backend/alembic/versions/ пуст — Alembic в проде не используется. Подробности и граница «raw SQL vs ORM» — docs/Schema_Migrations_vs_Alembic.md.
Триггеры миграции на Yandex Cloud: 3-й платящий пилот / Раунд А / госзаказ (нужен реестр ПО) / БД >10 GB / >50 RPS. На YC ~10–15 тыс ₽/мес.
Операционные грабли
docker compose restartНЕ перечитываетenv_file:— после правки.envвсегдаup -d --force-recreate --no-deps backend.deploy.ymlиспользуетgit reset --hard origin/main— ручные правки в/opt/gendesignбудут стёрты при следующем деплое (.env-файлы переживут — в.gitignore).- На проде всегда указывать
-f docker-compose.prod.yml(без него поднимет dev compose без Caddy). caddy reloadне сбрасывает retry-queue для ACME. При смене hostname с битым cert-state:docker volume rm gendesign_caddy_data && up -d caddy.
Текущий фокус (июнь 2026)
Исходный 12-недельный roadmap (Stage 0 → 2c, апрель–июнь) пройден: скелет/CI/прод, NSPD-скрейпер + per-bucket эластичность, ПКК-данные и скоринг участков — всё ✅. Site Finder вышел из стадии «заглушка» в боевой v2-движок, параллельно запущен Trade-In. Активные направления:
- Site Finder v2 «Foresight» (#944 GG-форсайт) — ИИ-прогноз продуктовой стратегии девелопера: спрос/предложение, сценарии, confidence, продуктовое ТЗ. Движок и фронт-секции отгружены, продолжается доведение точности и покрытия.
- ИРД (#1067) — исходно-разрешительная документация: overlay + analyze на участке.
- Trade-In «Мера» — оценка вторички на реальных данных (скрейперы Avito/Cian/Domclick/Yandex + Rosreestr ДКП + SberIndex), расширение покрытия аналогов и detail-парсинга.
- Generative Design (
/concept) — на ранней стадии (skeleton), доводится после стабилизации SF/Trade-In.
Трекаемый backlog и приоритеты — Forgejo Issues с лейблами scope/*, вторичка, status/*. North Star — см. секцию выше.
Команда и память проекта
2 фуллстек-разработчика, part-time 20 ч/нед, ритм: 1 синк/нед, daily-async в Telegram, PR-review обязательный, trunk-based. Codegen TS-типов из Pydantic — npm run codegen.
Knowledge base — Obsidian vault
Источник правды — Obsidian vault на obsidian.gendsgn.ru (Self-hosted LiveSync + CouchDB). Markdown-файлы с [[wiki-links]], MOC-страницами, Graph View и тегами. Multi-device sync: desktop / laptop / iPhone / Android. 268 entities мигрированы из исторического JSONL knowledge graph (scripts/migrate_kg_to_obsidian.py), который теперь deprecated.
Структура vault:
meta/— гайды, credentials, project meta (Project_GenDesign, TechStack, NorthStar)domains/{domrf,cadastre,rosreestr,analytics,ui,api,geo,infra}/— knowledge по бизнес-доменамcode/{modules,schemas,patterns,hooks,tasks}/— code-level entitiesdecisions/— ADR / планы / политикиfixes/— bug-журналыsessions/,sprints/,events/— chronological logsresearch/,sources/,feedback/,github/,limitations/— прочееold/— архив legacy paths (redirect-stubs)
Подключение коллеги — гайды в самом vault'е:
meta/01_connect_devices.md— установка Obsidian + LiveSync на любую платформу (через Setup URI или 4 поля)meta/03_obsidian_plugins.md— какие плагины ставить (Local REST API, Templater, Dataview)meta/04_mcp_obsidian_setup.md— подключение Claude к vault через MCP
Legacy: старый knowledge graph JSONL (memory/memory-gendesign.jsonl) — снапшот на момент 2026-05-11, не обновляется. Все новые факты пишутся в Obsidian.
Где вести задачи — Forgejo Issues vs Obsidian
Используем оба, но с чёткой ролью (трекер мигрирован с GitHub на self-hosted Forgejo 16.05.2026):
| Forgejo Issues (git.gendsgn.ru) | Obsidian vault | |
|---|---|---|
| Что сюда | Bug + Feature + Refactor — всё с связью с кодом / PR | Knowledge: research, ADR, planning, draft-ideas |
| Lifecycle | Open → Assigned → PR → Merged → Closed | Append-only журнал решений и контекста |
| Уведомления | Forgejo email/webhook | Никаких (читаешь когда сам пришёл) |
| Поиск | Forgejo search + labels + milestones | BM25 + tags + Graph + MOC |
| Видимость | Команде в reviewer'ах | Всем у кого есть vault password |
| Сроки | Milestones (12-week roadmap) | Frontmatter date:, status:, due: |
Правило перехода: Obsidian fixes/Bug_X.md со status: OPEN → когда требует PR — создаём Forgejo Issue, ссылку прописываем во frontmatter .md (issue: 42). Bug-исследование живёт в vault'е, action item — в Issues.
Что куда:
Bug_*(vault) + Forgejo Issue с тегомbug→ обнаружен баг, фикс через PRdecisions/*(vault) — ADR, не нужен Issueresearch/*(vault) — анализ источников, конкуренты, метрикиsessions/*(vault) — журналы рабочих сессий- Forgejo Issues
feat/*— фичи + PR на 1+ files, видимые в milestones
Claude Code subagents (.claude/agents/)
Разработка ведётся через Claude Code с 6 кастомными subagent'ами (path-scoped, со своими MCP-«учётками»: прод-PostgreSQL, Obsidian vault, Forgejo, GlitchTip). Полные правила — .claude/rules/ + корневой CLAUDE.md.
| Agent | Scope / зона ответственности |
|---|---|
tech-analyst |
Нечёткая / cross-domain задача → план перед кодом |
backend-engineer |
backend/app/** — FastAPI, Celery, scrapers, services |
frontend-engineer |
frontend/src/** — Next.js 15, React 19, hooks |
database-expert |
data/sql/**.sql, схема, EXPLAIN ANALYZE, прод-БД через MCP |
devops-engineer |
docker-compose*.yml, Caddyfile, .forgejo/workflows/** |
code-reviewer |
Pre-push lint: security, correctness, conventions |
Workflow: тривиально (typo, 1-line) → main session; single-domain → профильный worker; cross-domain → tech-analyst сначала. Worker → code-reviewer → коммит → push → PR в Forgejo. Branch + PR обязательны, никаких direct push в main.
Автономный bot-loop. Помимо ручных subagent'ов есть набор автономных персон (.claude/agents/auto-*.md, status draft), которые крутятся каждая в отдельном Claude Code-окне на /loop и двигают задачи через лейблы status/* (ready → wip → review → qa → done):
auto-analyst— декомпозирует work-items из vault/feedback в actionable Forgejo issues.auto-backend/auto-frontend— claim issuescope/*→ ветка + код + push + PR (Refs #N, неCloses).auto-code-reviewer— читает diff, выносит verdict, мерджит при APPROVE (merge-authority).auto-qa-tester— Playwright golden-path поstatus/qa, закрывает issue наstatus/done.auto-resolver— снимает блокерыneeds-human, используя capabilities, которых нет у headless-ботов (dev-IP, куки, SSH на прод, прямой доступ к БД).
stale-claims.yml авто-снимает протухшие claim-метки. Контракт claim/state-transition — .claude/agents/_autonomous_pickup.md.
Полезные ссылки
| 🌐 Production | https://gendsgn.ru/ |
| 🩺 Health | https://gendsgn.ru/health |
| 📚 OpenAPI | Swagger UI · https://gendsgn.ru/openapi.json (за Caddy basic_auth) |
| 🗂 Knowledge vault | https://obsidian.gendsgn.ru (требуется Obsidian + Self-hosted LiveSync, см. vault meta/01_connect_devices.md) |
| 🧰 Git / CI | git.gendsgn.ru (Forgejo) · CLAUDE.md — правила разработки |
| Backlog | Issues · Milestones |
| Деплой | Forgejo Actions · GHCR пакеты |
| Мониторинг | Sentry |
| Инфра | Beget VPS cp.beget.com/cloud/... · DNS |
Стратегические документы (снимки): docs/MVP_Goals_Python.md, docs/Бизнес-план v2.1 - Site Finder + Roadmap 12 месяцев.md, docs/obsidian-livesync.md. При расхождении с vault'ом — доверяем vault'у.