Разделение: copilot-instructions.md (правила) + DEVELOPMENT.md (порядок правок)
Deploy drhider / validate (push) Waiting to run
Deploy drhider / validate (push) Waiting to run
This commit is contained in:
@@ -1,120 +1,48 @@
|
|||||||
# ⛔ ПРАВИЛА ДЛЯ COPILOT — ПРОЕКТ DRHIDER
|
# ⛔ ПРАВИЛА ДЛЯ COPILOT — DRHIDER
|
||||||
|
|
||||||
Читать перед ЛЮБЫМ действием. Нарушение = зря потраченное время.
|
Читать перед ЛЮБЫМ действием.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⛔⛔⛔ ЗОЛОТОЕ ПРАВИЛО
|
## ⛔⛔⛔ НИЧЕГО НЕ ДЕЛАТЬ БЕЗ «ДЕЛАЙ»
|
||||||
|
|
||||||
**НИКОГДА НИЧЕГО НЕ ДЕЛАТЬ БЕЗ ЯВНОЙ КОМАНДЫ «ДЕЛАЙ».**
|
Любой вопрос, обсуждение, анализ — **НЕ повод менять код.**
|
||||||
|
|
||||||
Любой вопрос, обсуждение, анализ — НЕ повод менять код.
|
|
||||||
Только после явного: «делай», «делайте», «давай», «приступай», «пушить», «commit», «push».
|
Только после явного: «делай», «делайте», «давай», «приступай», «пушить», «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) |
|
| Меняешь код? | [`DEVELOPMENT.md`](DEVELOPMENT.md) — полный порядок действий |
|
||||||
| URL | https://drhider.pythonk8s.dev.nubes.ru/ |
|
| Архитектура? | [`ARCHITECTURE.md`](ARCHITECTURE.md) — схема, модули, поток данных |
|
||||||
| Репозиторий | https://gitea.services.ngcloud.ru/Nail/drhider |
|
| Деплой/ВМ/env? | [`DEPLOY.md`](DEPLOY.md) — всё про окружение |
|
||||||
| Точка входа | `site/app.py` → `app = create_app()` |
|
| Обзор проекта? | [`README.md`](README.md) — структура, API, правила |
|
||||||
| БД | **НЕТ** (всё в памяти) |
|
| История изменений? | [`History/`](History/) — что когда и зачем делалось |
|
||||||
| 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` |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⛔ ЗАПРЕЩЕНО
|
## 📋 Быстрая справка
|
||||||
|
|
||||||
1. Менять код без «делай»
|
- Платформа: **Штурвал** (Managed Flask, без Dockerfile/gunicorn)
|
||||||
2. Смотреть локальные папки contracts/
|
- URL: https://drhider.pythonk8s.dev.nubes.ru/
|
||||||
3. Действовать по догадкам («я бы сделал так», «можно попробовать»)
|
- БД: **нет**, всё в памяти
|
||||||
4. Удалять файлы/папки без разрешения
|
- Дизайн фронтенда: `/home/naeel/nubes/design/`
|
||||||
5. Использовать sed
|
- ВМ (legacy): `ssh -i ~/.ssh/naeel_vm_id_ed25519 naeel@5.172.178.213`
|
||||||
6. Откладывать commit/push «на потом»
|
|
||||||
7. Игнорировать проверку синтаксиса перед push
|
|
||||||
|
|||||||
+104
@@ -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"
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user