GenDesign — full migration from GitHub including issues/PR/wiki (2026-05-16)
Find a file
2026-04-26 18:20:59 +03:00
.github/workflows deploy.yml: sync compose+Caddyfile from git, reload caddy after up 2026-04-26 14:26:57 +03:00
backend backend: pin setuptools package to app/ 2026-04-26 13:59:54 +03:00
docs Initial commit: Discovery MVP docs (v2.1 + v2.2) 2026-04-25 08:40:09 +03:00
frontend docs+memory: HTTPS live, Apr26 catch-up 2026-04-26 14:50:17 +03:00
memory add nspd 2026-04-26 18:20:59 +03:00
ops ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
.editorconfig init 2026-04-25 13:45:19 +03:00
.env.example Fix env defaults: use Docker network hostnames + parametrize compose 2026-04-25 19:36:10 +03:00
.gitignore ops: real domain in Caddyfile + ignore egg-info 2026-04-26 12:49:20 +03:00
.pre-commit-config.yaml ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
Caddyfile ops: real domain in Caddyfile + ignore egg-info 2026-04-26 12:49:20 +03:00
docker-compose.prod.yml ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
docker-compose.yml ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
Makefile ops: alembic baseline, pre-commit, TIGER cleanup, pg_dump scripts 2026-04-26 13:08:51 +03:00
README.md add nspd 2026-04-26 18:20:59 +03:00
sshkey.txt deploy.yml: sync compose+Caddyfile from git, reload caddy after up 2026-04-26 13:31:26 +03:00

Generative Design + Site Finder

Две продуктовые линии в одной воронке: Site Finder (AI-подбор инвестиционных земельных участков) + Generative Design (автоматическая генерация концепций застройки) для девелоперов РФ.

North Star

К концу месяца 3: 3 платящих пилота (≥30 тыс. ₽/мес каждый) + заявка в реестр российского ПО → право на Раунд А (2025 млн ₽).

Acceptance criteria разбиты на 3 блока (функционально / бизнесово / технически). Правило перехода: 3/3 → Раунд А; 2/3 → продление Фазы 0 на 12 мес.; 1/3 или меньше → стоп проекта.


Текущий статус (26 апреля 2026)

Инфраструктура: live на HTTPS. Прод доступен по https://gendsgn.ru/, Let's Encrypt cert получен. Полный цикл автодеплоя из GitHub Actions работает. 26.04 прод полностью пересоздан (down -v + redeploy) — БД свежая, backend в multi-stage образе под non-root пользователем, healthcheck-и работают, ловит ошибки в Sentry.

Что Где Статус
Production URL https://gendsgn.ru/ HTTP/2 + HTTP/3, валидный TLS
Health endpoint https://gendsgn.ru/health {"status":"ok","environment":"prod"}
www → apex https://www.gendsgn.ru/ 301 redirect
Production VPS Beget Cloud, Москва, 2 vCPU / 4 GB / 40 GB NVMe работает
IP сервера 46.173.16.127
Домен gendsgn.ru (Beget, до 26.04.2027, ЕСИА VERIFIED) DNS на 8.8.8.8/1.1.1.1
Postgres + PostGIS 3.4 Docker, в составе compose Up (healthy)
Redis 7 Docker Up (healthy, redis-cli ping)
Backend FastAPI Docker, multi-stage, non-root, 1.44 GB Up (healthy, curl /health)
Frontend Next.js 15 Docker, multi-stage, npm ci Up
Caddy reverse proxy Docker, ports 80/443 Up + auto-TLS Let's Encrypt
GitHub Actions deploy .github/workflows/deploy.yml build → push GHCR → ssh deploy → git pull → caddy reload
GHCR пакеты ghcr.io/lekss361/gendesign-{backend,frontend} приватные, сервер авторизуется через PAT
UFW firewall 22 / 80 / 443 активен
SSH hardening root login off, password auth off
Sentry проект gendesign-backend (org qqq, free tier) DSN на VM, события приходят
GitHub Issues / Milestones 12 issues, 3 milestones (Stage 1 / Stage 2 / Infra Hardening) backlog засеян
Бэкапы pg_dump ops/backup.sh готов ⏸ S3-бакет не настроен (Selectel/Yandex)

Решение по плану разработки: pending. Антон (второй разработчик) сообщил о доступе к ДДУ-данным. Решается в понедельник 27.04.2026 — выбор между:

  • Plan A (Analytics First) — Stage 1 переезжает на «3 плитки» аналитики (что строить / по какой цене / за какое время), Generative и Site Finder сдвигаются;
  • Original plan — Stage 1 = Generative MVP, Stage 2 = Site Finder, аналитика как enrichment.

Зависит от 5 факторов канала ДДУ: легальность, поля, покрытие, свежесть, условия коммерческого использования. См. сущности PlanA_AnalyticsFirst_Apr25 и SalesTracking_Strategy_Apr25 в графе памяти.

26.04 вечер — data discovery разблокировал Plan A независимо от Антона. Найдены три легальных канала ground-truth-данных:

  1. Росреестр CSV-датасет (DataSource_Rosreestr_DealsCSV_Apr26) — per-deal цены сделок ДКП+ДДУ из ФГИС ЕГРН, 9 кварталов 2024Q1 2026, ~898К сделок РФ/квартал. Открытые данные по 8-ФЗ, разделитель ~, гранулярность до кадастрового квартала.
  2. ДОМ.РФ фронт-API (DataSources_Analysis_Apr26 + 12 вкладок) — открытые JSON без auth (либо Basic MTpqd2U= хардкоден), per-flat прайс-лист, реализация/готовность как velocity.
  3. НСПД MarketAnalytics (NSPD_MarketAnalytics_FullArchitecture_Apr26) — индикаторы цен по кадастровым кварталам, 8 лет longitudinal, GeoJSON-полигоны для heatmap. Архитектура полностью раскрыта в debug-браузере (saveUserFilters → graphEgrn*/tableEgrn/geomDataForHeatMap, серверная сессия фильтров через userFiltersId). ⚠ graphEgrnCandleMedian/LineMedian (абсолютные ₽/м²) дают 403 для physic-аккаунта — но эти данные мы уже получаем из CSV-датасета Росреестра.

Структура репозитория

gendesign/
├── backend/                           # Python 3.12 / FastAPI / PostGIS
│   ├── pyproject.toml                 # uv-проект, ruff/mypy/pytest конфиги
│   ├── Dockerfile                     # с системными deps под Geo + WeasyPrint
│   ├── .env.example
│   ├── app/
│   │   ├── main.py                    # FastAPI + Sentry + /health
│   │   ├── core/                      # config (Pydantic Settings), db (SQLAlchemy)
│   │   ├── api/v1/                    # concepts.py, parcels.py
│   │   ├── schemas/                   # Pydantic-контракты для openapi-typescript
│   │   ├── services/
│   │   │   ├── generative/            # Stage 1: geometry, teap, financial
│   │   │   ├── site_finder/           # Stage 2: parser, scorer, filters
│   │   │   └── exporters/             # Stage 1c: pdf, excel, dxf
│   │   ├── models/parcel.py           # GeoAlchemy2 + PostGIS
│   │   └── workers/celery_app.py      # Stage 2a: daily PKK sync
│   └── tests/
├── frontend/                          # Next.js 15 / React 19 / TypeScript / Leaflet
│   ├── package.json                   # включая `npm run codegen` → openapi-typescript
│   ├── Dockerfile                     # multi-stage, output: standalone
│   ├── public/                        # static assets (gitkeep пока пусто)
│   └── src/app/
│       ├── page.tsx                   # / — главная
│       ├── concept/page.tsx           # /concept — Generative Design
│       └── site-finder/page.tsx       # /site-finder — Site Finder
├── memory/
│   └── memory-gendesign.jsonl         # хард-линк на C:\mcp\.aim — общий граф памяти
├── docs/                              # стратегические документы (бизнес-план, цели MVP)
├── ops/                               # эксплуатация
│   ├── backup.sh                      # pg_dump cron + опциональный S3 upload
│   └── restore.sh                     # восстановление из дампа (RESTORE_CONFIRM=yes)
├── backend/
│   ├── alembic.ini, alembic/          # миграции БД (versions/ пуст до Stage 2a)
│   └── db/init/                       # init-скрипты, монтятся в /docker-entrypoint-initdb.d
│       └── 99_drop_unused_extensions.sql  # дроп TIGER/topology/fuzzystrmatch на свежем volume
├── .env.example                       # шаблон prod env (POSTGRES_*, IMAGE_TAG)
├── docker-compose.yml                 # dev: Postgres + Redis + backend + frontend
├── docker-compose.prod.yml            # prod: образы из GHCR + Caddy + Postgres+Redis
├── Caddyfile                          # авто-TLS Let's Encrypt для gendsgn.ru
├── Makefile                           # make up / migrate / migration / test / codegen / pre-commit-install
├── .pre-commit-config.yaml            # ruff + prettier + housekeeping hooks
└── .github/workflows/
    ├── ci.yml                         # ruff + mypy(core) + pytest + frontend build
    └── deploy.yml                     # build → push в GHCR → ssh: git fetch + reset --hard + caddy reload

Технический стек (v2.2)

Backend: Python 3.12, FastAPI, SQLAlchemy 2.0, GeoAlchemy2, Pydantic v2, Alembic, Celery + Redis, httpx Geo: Shapely 2.0, GeoPandas, Pyproj (WGS84 ↔ МСК-66 для Свердловской обл.) ML: scikit-learn (XGBoost — отложен на Фазу 1, в Discovery эвристики) БД: PostgreSQL 16 + PostGIS 3.4, Redis 7 Frontend: Next.js 15, React 19, TypeScript 5, Tailwind 4, TanStack Query, Leaflet (Mapbox в Stage 2b), react-leaflet 5 Экспорт: WeasyPrint (PDF), ezdxf (DXF), openpyxl (Excel) Dev: uv (lockfile зафиксирован), ruff (lint+format), mypy (strict только на core), pytest, pre-commit (hooks: ruff, prettier, detect-private-key)


Команда и порядок работы

2 фуллстек-разработчика, оба part-time 20 ч/нед — итого ~40 person-hours/нед, эффективных с координацией ~33.

Ритм:

  • 1 синк/нед (30 мин, понедельник)
  • daily-async в Telegram
  • PR review обязательный
  • Trunk-based: feature ветки ≤ 3 дней
  • Codegen TS-типов из Pydantic (npm run codegen) — без этого 2 фуллстека плодят расхождения в API-контракте

Этапы MVP (12 недель, базовый план)

Stage 0 — Скелет (нед. 1) выполнено

Монорепо backend+frontend, Docker с PostGIS+Redis, FastAPI hello, Next.js hello, openapi-typescript codegen, GitHub Actions CI, ruff + mypy(core) + pytest. Без JWT (single-tenant + X-Demo-User до Раунда А). Production VPS поднят, GHCR-деплой работает.

Stage 1 — Generative MVP (нед. 27) ⏸ pending решения по Plan A

  • 1a (нед. 23): геометрия + API-контракт. Shapely-сервис (отступы, сетка), Pydantic-схемы, POST /api/v1/concepts с заглушкой. Фронт: страница /concept, Leaflet, импорт GeoJSON, форма параметров, 3 варианта в табах.
  • 1b (нед. 45): алгоритм размещения. Жадное заполнение, 3 стратегии (max площадь / max инсоляция / balanced), STRtree для коллизий. Цель ≤10 сек, fallback 15 сек.
  • 1c (нед. 67): ТЭП + финмодель + экспорты. WeasyPrint PDF, ezdxf, openpyxl. UI кнопок скачивания.

Acceptance Stage 1 (конец нед. 7): полигон → 3 варианта → ТЭП + финмодель → PDF/Excel/DXF.

Stage 2 — Site Finder MVP (нед. 812)

  • 2a (нед. 89): data pipeline. Парсер ПКК Rosreestr (httpx async, retries), модель Parcel с GeoAlchemy2, ≥1000 участков Екатеринбурга. Overpass API для POI, ДОМ.РФ/ЦИАН для цен м², кеш в Redis. Опционально: воркер sales_tracker.py — ежесуточный мониторинг шахматок застройщиков (Velocity Score).
  • 2b (нед. 1011): скоринг + API + UI. 3 критерия (расстояние до центра, плотность POI в 1 км, цена района), POST /api/v1/parcels/search. Карта с градацией по рейтингу, фильтры, карточка.
  • 2c (нед. 12): интеграция + полировка. Кнопка «Обсчитать концепцию», демо-наполнение 50 участков, бэкапы БД, подача в реестр ПО.

Альтернативный план A (Analytics First)

Если Антон в понедельник подтвердит легальный канал ДДУ-данных — Stage 1 переезжает на «3 плитки» аналитики (что строить / по какой цене / за какое время), Generative переходит на Stage 2 со Smart Defaults на основе аналитики, Site Finder — на Stage 3 с Velocity Score из ДДУ. См. PlanA_AnalyticsFirst_Apr25 в графе.

Что урезано из v2.2 из-за part-time × 2

  • XGBoost-скоринг → Фаза 1 (с реальными данными от пилотов)
  • JWT-auth с refresh → перед Раундом А
  • mypy --strict — только на core (generative/*, site_finder/scorer.py)
  • Время генерации ≤ 15 сек как fallback (а не 10 сек)

Quick start (локально)

Требования: Docker Desktop, Node.js 20+, uv (для backend dev вне Docker).

# 1. Скопировать env-файлы
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
cp .env.example .env  # опционально, для prod compose

# 2. Запустить всё
docker compose up -d --build
# или: make up

# 3. Проверить
curl http://localhost:8000/health
# → {"status":"ok","environment":"dev"}

# Frontend → http://localhost:3000
# Swagger docs → http://localhost:8000/docs

Полезное:

make logs                # tail логов всех сервисов
make backend-shell       # bash внутри backend контейнера
make migrate             # alembic upgrade head (когда добавим миграции)
make test                # pytest
make lint                # ruff check
make typecheck           # mypy на core
make codegen             # обновить TS-типы из OpenAPI

Production хостинг — Beget VPS

Текущая live-конфигурация: Beget Cloud, Москва, Standard 3+ GHz, 2 vCPU / 4 GB / 40 GB NVMe.

Стоимость: ~33 ₽/день сервер + ~5 ₽/день IPv4 = ~1140 ₽/мес. Плюс домен .ru (~17 ₽/мес).

Что крутится на VM (/opt/gendesign):

  • 5 контейнеров через docker-compose.prod.yml: postgres, redis, backend, frontend, caddy
  • Backend и frontend образы пуллятся из приватного GHCR
  • Persistent volumes: gendesign_postgres_data, gendesign_redis_data, gendesign_caddy_*
  • Backend и frontend биндятся на 127.0.0.1:8000 и 127.0.0.1:3000 — наружу выходит только Caddy на :80/:443

Доступ: SSH-only по ключу к non-root пользователю gendesign. Root login отключён, password auth отключён, fail2ban Beget активен.

Триггеры миграции на Yandex Cloud

Переезжаем на YC Managed PostgreSQL + Compute + Container Registry, когда:

  • Подписан 3-й платящий пилот (~ конец мес. 3)
  • Закрылся Раунд А
  • Идёт переговор с госзаказчиком (нужен реестр ПО + солидная инфра)
  • БД > 10 GB или появилось > 50 RPS

Стоимость production на YC: ~1015 тыс ₽/мес.

Что осталось до «infra-ready»

  • Купить доменgendsgn.ru зарегистрирован в Beget 26.04.2026 (199₽/420₽). DNS на NS Beget, A-записи прописаны
  • ЕСИА-верификация админа домена — пройдено 26.04, статус REGISTERED, DELEGATED, VERIFIED
  • Caddy TLS на gendsgn.ru — Let's Encrypt cert получен, HTTPS живёт
  • Sentry DSN — проект gendesign-backend создан в org qqq, DSN в /opt/gendesign/backend/.env, тестовое событие прошло
  • GitHub Issues / Milestones / Labels — backlog засеян (см. Issues)
  • Настроить ежесуточный pg_dump → Object Storage. Скрипт ops/backup.sh готов, осталось создать Selectel/Yandex bucket и положить креды в /etc/default/gendesign-backup на VM (#3)
  • Прокинуть SENTRY_RELEASE в deploy.yml для tracking релизов в Sentry (#4)
  • Подключить Антона к knowledge-graph (#11)
  • При следующем wipe down -v — TIGER/topology/fuzzystrmatch автоматом дропнутся (init-скрипт backend/db/init/99_drop_unused_extensions.sql)

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

  • docker compose restart НЕ перечитывает env_file: — после правки backend/.env всегда docker compose -f docker-compose.prod.yml up -d --force-recreate --no-deps backend
  • deploy.yml использует git reset --hard origin/main — любые ручные правки в /opt/gendesign будут стёрты при следующем деплое. .env файлы переживут (в .gitignore)
  • docker compose up без -f docker-compose.prod.yml на проде поднимет dev compose (с локальной сборкой образов и без Caddy). Признаки: Image ... Built в выводе и WARN про orphan caddy. Всегда указывай -f
  • caddy reload не сбрасывает retry-queue. Если Caddy пытался получить cert для несуществующего hostname (например, плейсхолдера из старого Caddyfile), фоновые попытки могут переключить его в Let's Encrypt staging fallback. Рецепт чистого старта: docker volume rm gendesign_caddy_data && docker compose up -d caddy

GitHub Actions deploy

Workflow .github/workflows/deploy.yml:

  1. Build обоих Docker-образов (backend ~2.5 мин с нуля, frontend ~1 мин с нуля; повторно из кеша — секунды)
  2. Push в GHCR (ghcr.io/lekss361/gendesign-backend, gendesign-frontend) с тегами latest и <sha7>
  3. SSH deploy: docker compose -f docker-compose.prod.yml pull && up -d, потом curl /health

GitHub Secrets (Settings → Secrets and variables → Actions):

Имя Значение
DEPLOY_HOST 46.173.16.127
DEPLOY_USER gendesign
DEPLOY_SSH_KEY приватный ключ ~/.ssh/gendesign_deploy целиком
DEPLOY_PORT 22 (или другой, если поменяли)

GITHUB_TOKEN встроенный — отдельный secret для push в GHCR не нужен.

Авторизация сервера в GHCR (приватные пакеты):

Сервер авторизуется однократно через PAT с read:packages:

# На сервере, как пользователь gendesign
read -s GHCR_PAT && echo "$GHCR_PAT" | docker login ghcr.io -u lekss361 --password-stdin && unset GHCR_PAT

Auth сохраняется в ~/.docker/config.json и переживает рестарт. Ротировать PAT раз в год.


Память проекта (knowledge graph)

Все решения, факты, риски, KPI, протоколы валидации хранятся только в графе памяти, не в .md-документах. Это решает проблему расхождения версий между документами.

Как устроено:

  • MCP-сервер mcp-knowledge-graph пишет в C:\mcp\.aim\memory-gendesign.jsonl
  • Этот файл — хард-линк на <repo>/memory/memory-gendesign.jsonl
  • Изменения попадают в git автоматически
  • Синхронизация между коллегами — через git pull / git push

Правило проекта (Feedback_MemoryFirst):

  • Все факты и решения сохраняем в граф (context: "gendesign")
  • .md / .docx / .pdf Claude не создаёт сам — только по явному запросу
  • Источник правды = граф, документы = производные срезы

Рабочий цикл:

git pull                                      # перед началом работы
# ... сессия с Claude ...
git add memory/memory-gendesign.jsonl
git commit -m "Memory: <что добавили>"
git push

Конфликты в .jsonl обычно простые (файл построчный): git pull --rebase, оставить обе стороны, git rebase --continue.

Подключение коллеги

Краткая инструкция для нового участника команды:

  1. Установить Claude Desktop, Node.js 20+, Git
  2. Клонировать репо в C:\Users\<имя>\source\repos\gendesign
  3. mkdir C:\mcp\.aim
  4. Создать хард-линк:
    New-Item -ItemType HardLink `
      -Path C:\mcp\.aim\memory-gendesign.jsonl `
      -Value $PWD\memory\memory-gendesign.jsonl
    
  5. Добавить в %APPDATA%\Claude\claude_desktop_config.json:
    "knowledge-graph": {
      "command": "npx",
      "args": ["-y", "mcp-knowledge-graph", "--memory-path", "C:\\mcp\\.aim"]
    }
    
  6. Перезапустить Claude Desktop полностью (через трей)
  7. Проверить: «Покажи память контекста gendesign»

Полная версия процедуры — в графе, сущность Onboarding_Colleague_KG.


Документы стратегии

В docs/:

  • MVP_Goals_Python.md — цели Discovery MVP, Python-стек (v2.2, апрель 2026)
  • Бизнес-план v2.1 - Site Finder + Roadmap 12 месяцев.md — бизнес-план

⚠️ Эти документы — снимок состояния на момент написания. Свежее состояние стратегии — в графе памяти. При расхождении доверяем графу.

Релевантные сущности графа на 26.04.2026:

Стратегия / план:

  • Project_GenDesign — общая шапка
  • TechStack_v2.2 — Python + Next.js стек
  • NorthStar_DiscoveryMVP — 3 пилота + реестр ПО → Раунд А
  • Stages_MVP_v1 — базовая разбивка по этапам
  • Team_Setup — 2 фуллстека part-time
  • WorkSplit_Generative_Stage1 — кто что делает в Generative
  • PlanA_AnalyticsFirst_Apr25 — pending pivot решение (ждём 27.04 — Антон по ДДУ)
  • SalesTracking_Strategy_Apr25 — шахматки застройщиков (downgrade-нуты после находок 26.04)
  • DataSources_Pricing_Apr25 — источники цен и площадей (общий обзор)
  • DataSources_Analysis_Apr26 — глубокий анализ ДОМ.РФ как ground truth (заменяет ожидание ДДУ-канала)
  • Validation_Findings_Apr25 — валидация бизнес-плана

Источники данных (обновлено 26.04 вечер):

  • DataSource_Rosreestr_DealsCSV_Apr26 — per-deal цены сделок ДКП+ДДУ из ФГИС ЕГРН, 9 кварталов 2024Q1 2026, ~898К сделок РФ/квартал
  • DataSource_Rosreestr_DealsCSV_Schema_Apr26 — схема CSV (разделитель ~, 17 полей)
  • DataSource_Rosreestr_DealsCSV_Sverdl_Q1_2026 — реальные цифры по Свердл.обл (ДКП median 82,594 ₽/м², ДДУ median 156,314 ₽/м²)
  • DataSource_Rosreestr_DealsCSV_Limits_Apr26 — ограничения (нет покупателя, period=начало квартала)
  • DataSource_Rosreestr_ETL_Plan_Apr26 — план интеграции в Stage 2a
  • DataSource_PerDeal_Reality_Apr26 — иерархия источников (1. Росреестр CSV → 2. ДОМ.РФ → 3. ЦБ ипотека → 4. Fedstat → 5. УПН Екб)
  • DataSource_UPN_Ekb_Apr26 — Уральская Палата Недвижимости (19 лет longitudinal по Екб)

ДОМ.РФ фронт-API (по вкладкам):

  • DomRF_Architecture_Apr26 · DomRF_Host_Apr26 · DomRF_API_PortalAnalytics_Apr26 · DomRF_KeyAndLegal_Apr26 (ключ Basic MTpqd2U=)
  • DomRF_PlanA_Mapping_Apr26 — маппинг endpoints на 3 плитки Plan A
  • 12 вкладок аналитики: DomRF_Tab1_HousingIndicators_Apr26 ... DomRF_Tab11_MortgageStats_Apr26
  • DomRF_Spec_APF_v22 — официальный B2B API (только для банков)
  • DomRF_OfficialVsFront_Comparison_Apr26 — почему фронт незаменим даже с банк-партнёром

НСПД (nspd.gov.ru, новый портал Росреестра):

  • Rosreestr_SiteMap_Apr26 — карта ресурсов Росреестра/НСПД
  • NSPD_Architecture_Apr26 — React SPA, micro-frontends, OAuth через ESIA
  • NSPD_OAuth_Architecture_Apr26 — auth flow, JWT TTL=30 мин
  • NSPD_PhysicAccess_Apr26 — что доступно физик-аккаунту (18 сервисов, marketAnalytics ✓)
  • NSPD_MarketAnalytics_FullArchitecture_Apr26 — полный API-флоу разобран в debug-браузере 26.04: saveUserFilters → graphEgrn*, tableEgrn, geomDataForHeatMap. Серверная сессия фильтров (userFiltersId)
  • NSPD_OrgOnly_Endpoints_Apr26 — graphEgrnCandleMedian/LineMedian возвращают 403 (абсолютные ₽/м² скрыты от physic, дублируют CSV-датасет)
  • NSPD_DataValue_For_GenDesign_Apr26 — value: 8 лет longitudinal, гранулярность до кадастрового квартала, GeoJSON-полигоны для heatmap
  • NSPD_AEGGIS_WMTS_Apr26 — WMTS-тайлы для embed в Mapbox/Leaflet
  • NSPD_PII_Leak_Apr26 · Rosreestr_Recon_Findings_Apr26 · Rosreestr_TLS_Note_Apr26 — security/инфра наблюдения

Инфраструктура:

  • Hosting_Pricing_Apr25 — сравнение провайдеров
  • Hosting_Decision_Apr25 — решение по Yandex Cloud (для будущей миграции)
  • Runbook_VPS_Setup_Beget — пошаговая настройка production VM
  • SSH_Setup_Apr25 — локальная настройка SSH
  • DockerOps_Apr26 — multi-stage Dockerfile, npm ci, healthcheck fix, same-origin API
  • Production_Wipe_Apr26 — clean re-deploy с нуля (event)
  • Domain_Setup_Apr26 — gendsgn.ru, Beget, DNS, ESIA-правило
  • Sentry_Setup_Apr26 — проект, DSN, тестовое событие
  • OpsBundle_Apr26 — Alembic + TIGER cleanup + pre-commit + pg_dump
  • HTTPS_Live_Apr26 — milestone: HTTPS прод заработал (включая lessons learned по ACME retry-state)

Процесс / правила:

  • Onboarding_Colleague_KG — подключение нового участника к графу
  • Feedback_MemoryFirst — правило: память first, docs только по запросу

Полезные ссылки