GenDesign — full migration from GitHub including issues/PR/wiki (2026-05-16)
Find a file
bot-backend 64d113d649
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
feat(tradein): EKB geoportal building ingest + geocoder tier (complete city buildings)
2026-06-19 17:51:07 +03:00
.claude chore(agents): reviewer back to Opus (revert model-part of aa3d012) 2026-05-31 17:16:57 +03:00
.forgejo/workflows ci: cache uv + skip dev deps to speed up gate jobs (#1709) 2026-06-17 22:29:33 +03:00
.github/workflows chore(ci): run CI on push to feature branches (#195) 2026-05-16 08:26:04 +00:00
auth feat(rbac): add analyst role + §19 audit-log middleware (#962) 2026-06-08 12:16:19 +05:00
backend feat(site-finder): snapshot.pdf exclude_dev param — hide competitor by developer name 2026-06-18 15:23:28 +03:00
caddy chore(auth): regenerate praktika pilot password (#635/#659) 2026-05-30 21:10:09 +03:00
data fix(sql): ALTER TABLE IF EXISTS in migration 162 — district_economics absent on main DB (deploy red) 2026-06-17 20:02:06 +00:00
docs perf(db): covering-index objective_lots district-price (#70) + 152-ФЗ/perf audit docs (#70 #79) 2026-06-14 00:09:09 +05:00
frontend chore(frontend): regen api-types for snapshot exclude_dev param 2026-06-18 15:51:56 +03:00
memory Memory: +rel Project_GenDesign→SiteFinder_v0_2_May08 (deploys), SiteFinder_v0_2_May08→MVP_Scope_AreaSelect_Apr25 (contradicts... (2026-05-10 22:44:45 +05) 2026-05-10 22:44:45 +05:00
ops ci(infra): coverage-gate (#68) + OpenAPI codegen-assert (#69) + uptime monitoring (#75) 2026-06-13 23:28:06 +05:00
preview feat(preview): add static mockups behind basic auth at /preview/* 2026-05-17 11:15:13 +03:00
scripts fix(week-review): автофиксы код-ревью — 169 issue (label «week ревью 1») 2026-06-15 20:21:11 +05:00
site-finder Merge pull request 'fix(site-finder): remove dead sat_factor (computed+written, never applied) (#1509)' (#1698) from fix/score-sat-factor-1509 into main 2026-06-17 18:28:45 +00:00
tradein-mvp feat(tradein): EKB geoportal building ingest + geocoder tier (complete city buildings) 2026-06-19 17:51:07 +03:00
.editorconfig init 2026-04-25 13:45:19 +03:00
.env.example feat(security): GlitchTip forwarder для basic_auth 401 events (Phase 2 PR #426) (#430) 2026-05-23 08:42:36 +00:00
.gitignore docs(readme): refresh to Jun 2026 — Trade-In/Мера + Site Finder v2 + structure + remove debug.log 2026-06-17 23:14:40 +03:00
.pre-commit-config.yaml chore(tradein): close pre-commit ruff gap + add CI pytest gate (#666) (#675) 2026-05-29 19:18:48 +00:00
.worktreeinclude chore(claude): agents view readiness — cleanup, .worktreeinclude, workflow (#497) 2026-05-24 09:20:26 +00:00
Caddyfile ci(infra): coverage-gate (#68) + OpenAPI codegen-assert (#69) + uptime monitoring (#75) 2026-06-13 23:28:06 +05:00
CLAUDE.md chore(claude-config): align with 2026 best practices (#495) 2026-05-24 08:48:42 +00:00
docker-compose.obsidian.yml fix 2026-05-11 09:57:40 +03:00
docker-compose.prod.yml feat(sf): cross-load ETL tradein→gendesign newbuilding_listings — вариант A (#976) 2026-06-12 11:18:47 +03:00
docker-compose.uptime.yml ci(infra): coverage-gate (#68) + OpenAPI codegen-assert (#69) + uptime monitoring (#75) 2026-06-13 23:28:06 +05:00
docker-compose.yml ship #13-16: multi-target Dockerfile, per-object drill-in, CRM pipeline, 2026-04-27 19:32:37 +03:00
Makefile ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
README.md docs(readme): refresh to Jun 2026 — Trade-In/Мера + Site Finder v2 + structure + remove debug.log 2026-06-17 23:14:40 +03:00

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 тыс. ₽/мес каждый) + заявка в реестр российского ПО → право на Раунд А (2025 млн ₽).


Текущий статус (июнь 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 (0112_*.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:

  1. Main стек (docker-compose.prod.yml, project gendesign): postgres + redis + backend (FastAPI) + worker + beat (Celery, Chromium только в worker) + frontend + caddy (auto-TLS Let's Encrypt). Backend/frontend bind на 127.0.0.1 — наружу только Caddy.

  2. Obsidian стек (docker-compose.obsidian.yml, project gendesign-obsidian): couchdb:3 — Self-hosted LiveSync remote для multi-device sync vault'а на obsidian.gendsgn.ru. Caddy в main-стеке маршрутизирует через gendesign_shared network.

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 → SSH git reset --hard, auto-apply pending data/sql/NN_*.sql через _schema_migrations (idempotent, см. ниже про миграции), sed SENTRY_RELEASE=$IMAGE_TAG в backend/.env.runtime, compose pull && up -d, caddy reload, curl /health.
  • .forgejo/workflows/deploy-tradein.yml — tradein-mvp стек (отдельный пайплайн).
  • .github/workflows/deploy-obsidian.yml — obsidian (остался на GitHub): триггер на docker-compose.obsidian.yml, scripts/setup-couchdb.sh, docs/obsidian-livesync.md. Без сборки образов (couchdb:3 с DockerHub), SSH compose up -d + idempotent bootstrap (CORS, DB, лимиты).

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 ~1015 тыс ₽/мес.

Операционные грабли

  • 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 entities
  • decisions/ — ADR / планы / политики
  • fixes/ — bug-журналы
  • sessions/, sprints/, events/ — chronological logs
  • research/, 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 → обнаружен баг, фикс через PR
  • decisions/* (vault) — ADR, не нужен Issue
  • research/* (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 issue scope/* → ветка + код + 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'у.