Skip to content

feat: add persistent ICS schedule subscriptions - #15

Open
lavafrai wants to merge 1 commit into
masterfrom
review/ics-publications
Open

lavafrai wants to merge 1 commit into
masterfrom
review/ics-publications

Conversation

@lavafrai

@lavafrai lavafrai commented Sep 9, 2026

Copy link
Copy Markdown
Owner

Что меняется

Добавляет публичные ICS-подписки на расписания групп и преподавателей и страницу /export для получения ссылки или разового скачивания календаря. Публикации сохраняются на диске со стабильными UID/SEQUENCE; при сбое источника выдаётся последняя успешная версия. Поддерживаются HEAD, ETag/304, отдельные правила Caddy/Anubis и ограничение запросов Nginx.

Отмены применяются после двух независимых наблюдений с интервалом не менее 15 минут. Удаление строго более 80% активных пар в наблюдаемом диапазоне отклоняется; ровно 80% допускается после подтверждения. Добавлены CI, тесты и документация. Excel в этот PR не входит.

Проверки

  • Rust: 26 тестов прошли; сборка прошла (локальный Rust 1.98.1).
  • Отдельный live smoke на трёх публичных расписаниях прошёл.
  • Веб: 14 Node-тестов и полная TypeScript/Vite-сборка прошли.
  • Chromium desktop/mobile с замоканным API: подготовка, ссылки, скачивание, webcal, stale, clipboard fallback, 503 и отсутствие overflow/ошибок JS.
  • Локальный новый сервер с реальным источником: ICS на 290 событий, HEAD и ETag/304; независимый ical.js подтвердил корректный разбор, уникальные UID и положительные длительности.
  • Граничный тест удаления 79/80/81%; git diff --check.

Ограничения перед продакшеном

Реальные подписки и обновления/отмены в Apple Calendar, Google Calendar и Outlook пока не проверены. Production Docker (Rust 1.95/alpine) и полный Caddy/Nginx/Anubis контур не запускались; живой end-to-end экспорт проверен для группы, но не преподавателя.

Защитная политика может сохранять фактически отменённые пары: массовые удаления выше порога блокируются, события вне новых границ дат сохраняются. История ограничена 16384 событиями без автоматической очистки; хранилище рассчитано на один процесс-писатель. Подробности: docs/schedule-publications.md и docs/ics-review-2026-09-09.md.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant