Раздел «📝 Коммит» умеет менять файлы: новый файл (текстом или документом), новая папка, замена с diff, удаление. Всё копится в черновике (в БД, переживает рестарт), дерево показывает изменения пометками 🆕/✏️/🗑. Сообщение коммита и Push — #9.
## Что меняется
Раздел «📝 Коммит» умеет менять файлы: новый файл (текстом или документом), новая папка, замена с diff, удаление. Всё копится в черновике (в БД, переживает рестарт), дерево показывает изменения пометками 🆕/✏️/🗑. Сообщение коммита и Push — #9.
Closes #26
**Порядок мержа:** #35 → #36 → этот (ветки построены друг на друге).
## Как проверить
```bash
make lint && make test # 128 тестов
```
## Чек-лист
- [x] lint + тесты зелёные
- [x] секретов в диффе нет
- [x] лог в issue дописан
🤖 Generated with [Claude Code](https://claude.com/claude-code)
- AccessService: одноразовые приглашения (128 бит, в БД только sha256, TTL 24 ч),
атомарный захват приглашения (условный UPDATE — из двух сканов одного QR проходит один),
антиперебор (> 5 неудач в час — молчание), отзыв (черновик и FSM удаляются), повторное приглашение
- ADMIN_IDS заводятся в БД при старте; дальше — только по приглашению
- AccessMiddleware: участники из БД (+ last_seen раз в 5 мин), новичкам — только /start <токен>
- «👥 Участники» для админов: список, QR (segno) + ссылка, отзыв с подтверждением
- один ответ на неверный/истёкший/использованный токен — без подсказок
Refs #25
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- UploadsRepo: локальный клон, fetch не чаще fetch_interval, ls-tree -z (пробелы/кириллица),
cat-file, последний коммит по пути; git без shell, ssh с -F /dev/null (без конфига хоста)
- «📝 Коммит»: папки/файлы с размерами, ⬆️ Вверх, страницы по 20, карточка файла
с последним коммитом, «👁 Показать» (<pre> или документом); в кнопках только индексы
- ключ для контейнера: GIT_SSH_KEY_B64 → временный файл 0600 (смонтированный файл хоста
контейнерному uid не прочитать); volume /data для клона
- тесты на настоящем bare-репозитории во временной папке
Refs #8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- новый файл: имя → содержимое текстом (```-обёртка снимается) или документом
- новая папка (виртуальная, пока в ней нет файлов), замена с diff +N/−M, удаление
- валидация: имя, ≤ 100 КБ, UTF-8, без NUL; .py — ast.parse с выбором «исправить / всё равно»;
.sourcecraft/, .tgit/, ruff.toml из бота не меняются
- DraftService: черновик в БД, 24 ч, ≤ 50 изменений; удаление нового файла убирает его из черновика
- дерево показывает черновик поверх репозитория: 🆕 / ✏️ / 🗑, размер — как будет после пуша
- экран черновика (A/M/D) с «↩️ убрать»
Refs #26
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Что меняется
Раздел «📝 Коммит» умеет менять файлы: новый файл (текстом или документом), новая папка, замена с diff, удаление. Всё копится в черновике (в БД, переживает рестарт), дерево показывает изменения пометками 🆕/✏️/🗑. Сообщение коммита и Push — #9.
Closes #26
Порядок мержа: #35 → #36 → этот (ветки построены друг на друге).
Как проверить
Чек-лист
🤖 Generated with Claude Code
Pull request closed