bot: Коммит — создание и изменение файлов, черновик #26
Notifications
Due Date
No due date set.
Blocks
Depends on
Reference: HSE/tgit#26
Reference in New Issue
Block a user
Описание
Требования C-10…C-16 из SPEC §4.1, ARCHITECTURE §2.3: изменения копятся в черновике до «Push».
Желаемый результат
ast.parseдля.py(ошибка → строка + «исправить»/«всё равно добавить»); запрет.sourcecraft/и служебных файлов.Подзадачи
app/repo/validate.pyapp/repo/drafts.py— сервис черновика (drafts,draft_changes)app/bot/routers/commit.pyАнализ
Затрагиваемые файлы
app/repo/validate.pyapp/repo/drafts.pyapp/bot/routers/commit.pyОграничения и риски
Telegram: текст ≤ 4096 символов — больше только документом. Код не исполняется при валидации.
Как проверить
В черновик: новый
utils.pyтекстом, заменаmain.pyдокументом, удаление файла; перезапустить бота — черновик на месте.Лог выполнения
2026-10-13
2026-10-15
app/repo/validate.py: имя ([A-Za-z0-9._-]{1,100}), защищённые пути (.sourcecraft/,.tgit/,.git/,ruff.toml), снятие ```-обёртки, размер/UTF-8/NUL,ast.parseдля.py,diff_stat.app/repo/drafts.py(DraftService): один черновик на участника,base_shaфиксируется при первом изменении, TTL 24 ч, ≤ 50 изменений; правка нового файла остаётсяadd, удаление нового файла убирает его из черновика.file_name → content → (syntax),dir_name; содержимое текстом или документом; «✏️ Заменить» с+N −M; «🗑 Удалить»; экран «🧾 Черновик» с «↩️ убрать». Дерево = репозиторий + черновик (🆕/✏️/🗑, размер «как будет после пуша»); виртуальные папки живут в FSM, пока в них не добавлен файл.Смержено в
devчерез PR #38 (614f8ea) — закрываю.