diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index cb4e245..2431900 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -1,120 +1,48 @@ -# ⛔ ПРАВИЛА ДЛЯ COPILOT — ПРОЕКТ DRHIDER +# ⛔ ПРАВИЛА ДЛЯ COPILOT — DRHIDER -Читать перед ЛЮБЫМ действием. Нарушение = зря потраченное время. +Читать перед ЛЮБЫМ действием. --- -## ⛔⛔⛔ ЗОЛОТОЕ ПРАВИЛО +## ⛔⛔⛔ НИЧЕГО НЕ ДЕЛАТЬ БЕЗ «ДЕЛАЙ» -**НИКОГДА НИЧЕГО НЕ ДЕЛАТЬ БЕЗ ЯВНОЙ КОМАНДЫ «ДЕЛАЙ».** - -Любой вопрос, обсуждение, анализ — НЕ повод менять код. +Любой вопрос, обсуждение, анализ — **НЕ повод менять код.** Только после явного: «делай», «делайте», «давай», «приступай», «пушить», «commit», «push». ---- +## ⛔⛔⛔ НЕ МЕНЯТЬ КОД БЕЗ РАЗРЕШЕНИЯ -## ⛔⛔⛔ НЕ МЕНЯТЬ КОД БЕЗ «ДЕЛАЙ» - -Даже если ошибка очевидна. Даже если «исправление в одну строку». -**Показать проблему → описать решение → ЖДАТЬ «делай».** - ---- - -## ⛔⛔⛔ НЕ СМОТРЕТЬ ЛОКАЛЬНЫЕ ПАПКИ CONTRACTS - -Весь старый код drhider — ТОЛЬКО на ВМ (`5.172.178.213` через SSH). -**НЕ лезть** в `/home/naeel/nubes/contracts/`, `contracts-flask/` и т.д. - -Единственное исключение: `/home/naeel/nubes/loadtest/` (образец managed Flask). - ---- +Даже если ошибка очевидна. **Показать → описать → ЖДАТЬ.** ## ⛔⛔⛔ НЕ СПЕШИТЬ -Сначала ВСЁ обдумать. Проверить. Перепроверить. Только потом отвечать. -Спешка → ошибки → проблемы. - ---- +Обдумать. Проверить. Перепроверить. Только потом отвечать. ## ⛔⛔⛔ НЕ ПРЕДПОЛАГАТЬ, НЕ ДОГАДЫВАТЬСЯ -Есть сомнения — **ОСТАНОВИТЬСЯ И СПРОСИТЬ**. -Не надо самостоятельно «улучшать» рабочий код без прямого разрешения. +Сомневаешься — **ОСТАНОВИСЬ И СПРОСИ.** + +## ⛔⛔⛔ НЕ ЛЕЗТЬ В ЛОКАЛЬНЫЕ ПАПКИ CONTRACTS + +Код drhider — на ВМ (`5.172.178.213` через SSH). Исключение: `/home/naeel/nubes/loadtest/`. --- -## ⛔⛔⛔ КОМАНДЫ В ТЕРМИНАЛЕ — С ТАЙМАУТАМИ +## 📋 Что есть в проекте -- `curl`: `--max-time N` -- `ssh`: `-o ConnectTimeout=N` -- `grep` на больших файлах: `timeout N grep ...` - ---- - -## ✅ ПОСЛЕ КАЖДОЙ ПРАВКИ - -1. **Проверить синтаксис:** - ```bash - python3 -c "import py_compile; py_compile.compile('файл.py', doraise=True)" - ``` -2. **Проверить импорт работает:** - ```bash - cd /home/naeel/nubes/drhider && python3 -c "from drhider import obfuscate_files, LLMClient" - ``` -3. **Проверить соседние функции не затёрты** (после replace_string_in_file) -4. **СРАЗУ commit + push** с подробным сообщением - ---- - -## ✅ КОММИТИТЬ + ПУШИТЬ ПОСЛЕ КАЖДОЙ ПРАВКИ - -Без исключений. Никаких «потом», никаких накоплений. -```bash -git add -A -git commit -m "подробное описание что сделано" -git push -``` - ---- - -## ✅ ДОКУМЕНТИРОВАТЬ ВСЁ В History/ - -Каждое изменение, план, ошибку — в `/home/naeel/nubes/drhider/History/`: -- Отдельный `.md` файл на каждую сессию/задачу -- Что планировалось → что сделано → в чём ошибся - ---- - -## 📋 ПРОЕКТ DRHIDER — КЛЮЧЕВЫЕ ФАКТЫ - -| Факт | Значение | +| Что нужно | Читай | |---|---| -| Платформа | **Штурвал** (Managed Flask на pythonk8s) | -| URL | https://drhider.pythonk8s.dev.nubes.ru/ | -| Репозиторий | https://gitea.services.ngcloud.ru/Nail/drhider | -| Точка входа | `site/app.py` → `app = create_app()` | -| БД | **НЕТ** (всё в памяти) | -| Dockerfile | **НЕТ** (Штурвал сам запускает Flask) | -| gunicorn | **НЕТ** (Штурвал сам) | -| Зависимости | `flask`, `python-docx`, `pdfplumber`, `httpx` | -| ВМ (legacy) | `5.172.178.213`, ssh-ключ `~/.ssh/naeel_vm_id_ed25519` | - -### Переменные окружения - -| Переменная | Значение | -|---|---| -| `LLM_API_KEY` | `sk-ucI5YvOticoOQ9Kuj5K9mQ` | -| `LLM_URL` | `https://api.aillm.ru/v1/chat/completions` | -| `LLM_MODEL` | `gpt-oss-120b` | +| Меняешь код? | [`DEVELOPMENT.md`](DEVELOPMENT.md) — полный порядок действий | +| Архитектура? | [`ARCHITECTURE.md`](ARCHITECTURE.md) — схема, модули, поток данных | +| Деплой/ВМ/env? | [`DEPLOY.md`](DEPLOY.md) — всё про окружение | +| Обзор проекта? | [`README.md`](README.md) — структура, API, правила | +| История изменений? | [`History/`](History/) — что когда и зачем делалось | --- -## ⛔ ЗАПРЕЩЕНО +## 📋 Быстрая справка -1. Менять код без «делай» -2. Смотреть локальные папки contracts/ -3. Действовать по догадкам («я бы сделал так», «можно попробовать») -4. Удалять файлы/папки без разрешения -5. Использовать sed -6. Откладывать commit/push «на потом» -7. Игнорировать проверку синтаксиса перед push +- Платформа: **Штурвал** (Managed Flask, без Dockerfile/gunicorn) +- URL: https://drhider.pythonk8s.dev.nubes.ru/ +- БД: **нет**, всё в памяти +- Дизайн фронтенда: `/home/naeel/nubes/design/` +- ВМ (legacy): `ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213` diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..be3bab8 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,104 @@ +# Порядок действий при изменении кода + +**Читать перед ЛЮБОЙ правкой.** + +--- + +## ⛔ ЗАПРЕЩЕНО + +1. Менять код без «делай» +2. Действовать по догадкам («я бы сделал так», «можно попробовать») +3. Удалять файлы/папки без разрешения +4. «Улучшать» рабочий код без прямого разрешения +5. Использовать `sed` +6. Откладывать commit/push «на потом» +7. Игнорировать проверку синтаксиса перед push + +--- + +## ✅ ПОРЯДОК ПРИ ЛЮБОМ ИЗМЕНЕНИИ + +### Шаг 1 — План +``` +Описать что меняем → получить «делай» +``` + +### Шаг 2 — Правка +Вносим изменения. Только то, что обговорено. Никакой самодеятельности. + +### Шаг 3 — Проверка синтаксиса +```bash +python3 -c "import py_compile; py_compile.compile('путь/к/файлу.py', doraise=True)" +``` +**КАЖДЫЙ изменённый .py файл.** + +### Шаг 4 — Проверка импорта +```bash +cd /home/naeel/nubes/drhider && python3 -c "from drhider import obfuscate_files, LLMClient; print('OK')" +``` + +### Шаг 5 — Проверить соседей +После `replace_string_in_file` — прочитать соседние строки, убедиться что не затёр соседнюю функцию/класс. + +### Шаг 6 — commit + push (СРАЗУ) +```bash +cd /home/naeel/nubes/drhider +git add -A +git commit -m "подробное описание что и зачем" +git push +``` +**Без исключений. Никаких накоплений.** + +### Шаг 7 — Документировать +Записать в `History/` что сделано: +- Отдельный `.md` файл +- Что планировалось → что сделано → в чём ошибся + +### Шаг 8 — Redeploy +Зайти в UI Штурвала → Redeploy `drhider`. + +--- + +## 🔧 Команды в терминале — всегда с таймаутами + +```bash +curl --max-time 30 ... +ssh -o ConnectTimeout=10 ... +timeout 10 grep ... file.txt +``` + +--- + +## 📦 Проверка ВСЕХ файлов разом + +```bash +cd /home/naeel/nubes/drhider +python3 -c " +import py_compile, os +for root, dirs, files in os.walk('.'): + for f in files: + if f.endswith('.py'): + py_compile.compile(os.path.join(root, f), doraise=True) + print(f'OK: {os.path.join(root, f)}') +" +``` + +--- + +## 🏷️ Версионирование + +Версия в `site/app.py` (переменная `VERSION`). +Менять при любом изменении кода, влияющем на поведение. + +--- + +## 📝 Пример хорошего коммита + +``` +git commit -m "generators: добавил generate_snils — генератор фиктивных СНИЛС + +- Новый файл drhider/generators/snils.py +- Добавлен паттерн в config.py → ENTITY_PATTERNS +- Добавлен в generators/__init__.py → ENTITY_GENERATORS +- bump VERSION 2.0.0 → 2.0.1" +```