# md2vk — Статус (история изменений) > Актуальный статус работ — в `openspec/` и `todo`-файлах; здесь хроника и границы. ## 2026-09: Документация, деплой, git, openspec **Сделано:** - [x] Аудит проекта (FastAPI ядро, Phase 1) - [x] Документация в `docs/` (index, access, architecture, vk-api, security, deploy, status) + `AGENTS.md` - [x] Аудит-лог авторизации (JSONL, ротация по дням) — см. `app/api/audit.py` + middleware - [x] Docker: порт 8420 (8000 занят), bind `./data`→`/data`, `./logs`→`/logs`, HEALTHCHECK через python (curl в slim-образе нет) - [x] openspec инициализирован (specs/ baseline) - [x] git init, push на gitverse.ru (kpa39l/md2vk), pull mirror в gitea.nixg.ru (estorozhenko/md2vk) - [x] Caddy на vps02: md2vk.nixg.ru + basic_auth estorozhenko (bcrypt), reverse_proxy 10.8.0.2:8420 - [x] fail2ban на vps02: jail md2vk, ban после 5 попыток, ручной unban - [x] Сквозная проверка: https + auth + блокировка + unban ## Phase 1 — Ядро (DONE, из STATUS.md) - Каркас проекта, структура директорий - Config из env (pydantic-settings) - Async SQLAlchemy + SQLite, инициализация БД - ORM-модели (User, VkAccount, Publication) - Fernet-шифрование/дешифрование токенов - Генерация и верификация API-ключей - Конвертер Markdown → VK format_data - VK API клиент (wall.post, users.get, check_token) - Pydantic-схемы запросов/ответов - API: /health, /accounts (CRUD), /publish, /convert, /publications - Аутентификация по API-ключу (заголовок + тело) - Генерация ключа шифрования - Проверка импортов и запуск - Тест конвертации через API (curl) ## Открытые задачи - [ ] Планировщик отложенных постов (status=scheduled → wall.post). Модель готова, worker нет. - [ ] OAuth-флоу VK ID (кнопка «Прикрепить аккаунт»); нужны client_id/secret VK-приложения - [ ] Web UI (форма поста + превью) - [ ] Unit-тесты конвертера (pytest) - [ ] Integration-тесты API (pytest + httpx) - [ ] Rate limiting (in-memory bucket, RATE_LIMIT_PER_MINUTE) - [ ] Retry при сетевых ошибках VK API - [ ] Graceful shutdown - [ ] Read-only rootfs (уже `read_only: true` в compose, но /logs мешает; пересмотреть) - [ ] CORS (ограничение по origin) - [ ] Обработка длинных постов (multipart: пост + комментарии) - [ ] Hermes skill md2vk (проверка сервиса, публикация, добавление аккаунта) ## Границы Phase 1 - Конвертация Markdown → VK format_data (жирный, курсив, код, ссылки, заголовки, цитаты, блоки кода) - Публикация поста на стене VK - Шифрование токенов (Fernet + Docker secret) - Аутентификация по API-ключу - Управление VK-аккаунтами (добавить, список, удалить) - Архив публикаций с фильтрацией - Конвертация без публикации (preview) - Отложенные посты: только запись `scheduled` (без планировщика)